1. ホーム
  2. node.js

[解決済み] quitを実行した後、Handshakeをenqueueにできない

2022-02-15 12:21:35

質問

以下のコードを実装しています。

module.exports = {
    getDataFromUserGps: function(callback)
    {
        connection.connect();
        connection.query("SELECT * FROM usergps", 
            function(err, results, fields) {
                if (err) return callback(err, null);
                return callback(null, results);
            }
        ); 
        connection.end();
    },
    loginUser: function(login, pass, callback)
    {
        connection.connect();
        connection.query(
            "SELECT id FROM users WHERE login = ? AND pass = ?",
            [login, pass],
            function(err, results, fields) 
            {
                if (err) return callback(err, null);
                return callback(null, results);
            }
        ); 
        connection.end();
    },
    getUserDetails: function(userid, callback)
    {
        connection.connect();
        connection.query(
            "SELECT * FROM userProfilDetails LEFT JOIN tags ON userProfilDetails.userId = tags.userId WHERE userProfilDetails.userid = ?",
            [userid],
            function(err, results, fields)
            {
                if (err) return callback(err, null);
                return callback(null, results);
            }
        );
        connection.end();
    },
    addTags: function(userId, tags)
    {
        connection.connect();
        connection.query(
            "INSERT INTO tag (userId, tag) VALUES (?, ?)",
            [userId, tags],
            function(err, results, fields)
            {
                if (err) throw err;
            }
        )
        connection.end();
    }
}

すべてがうまくいくのは、最初の1回だけです。2回目にこのクエリを使用すると、次のエラーが発生します。

Cannot enqueue Handshake after invoking quit

をしないようにしてきました。 .end() を接続することができますが、それは役に立ちませんでした。

どうすればこの問題を解決できますか?

解決方法は?

node-mysqlモジュールを使用している場合、.connectと.endを削除するだけです。 私自身、この問題を解決したところです。 どうやら最後のイテレーションで不要なコードを押し込んだようで、それがまたバグになっているようです。 すでにcreateConnectionコールを実行している場合は、接続する必要はありません。