Can’t add new command when connection is in closed state

Node+Express+MySQLを使ってデータ取得時に2回目から以下のエラーが発生しましたので、原因と解決をメモしておきたいと思います。

Can't add new command when connection is in closed state

原因

const table = "user";
module.exports = {
  findAll: () => {
    return new Promise((resolve, reject) => {
      const db = require("../utils/db.connection");
      db.query(
        `SELECT * FROM ${table} WHERE enabled = 1`,
        (err, result, fields) => {
          if (err) {
            reject(err);
          } else {
            console.log(result);
            resolve(result);
          }
        }
      );
      db.end(); // こちら
    });
  },

上記の「こちら(db.end())」のように毎回クエリ実行後にDBを閉じましたが、Node.js勝手に閉じ始めてくれるらしいです。

詳しい内容はこちらをご参考ください。

解決

上記のソースコードで「db.end()」を全部削除することで正常に動きました。直したコードが以下となります。

const table = "user";
const db = require("../utils/db.connection");

module.exports = {
  findAll: () => {
    return new Promise((resolve, reject) => {
      db.query(
        `SELECT * FROM ${table} WHERE enabled = 1`,
        (err, result, fields) => {
          if (err) {
            reject(err);
          } else {
            console.log(result);
            resolve(result);
          }
        }
      );
    });
  },

コメントを残す