1. ホーム
  2. node.js

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

2023-02-26 20:28:08

質問

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

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();
    }
}

すべてがうまくいくのは、最初の一回だけです。もし私が2回目にクエリを使用したい場合、次のようなエラーが発生します。

Cannot enqueue Handshake after invoking quit

をしないようにしています。 .end() の接続をしないようにしてみましたが、効果がありませんでした。

どうしたらこの問題を解決できますか?

どのように解決するのですか?

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