完成脚本后,Node JS sequelize不会自动关闭

时间:2019-01-21 11:57:31

标签: node.js sequelize.js

我使用sequelize.js进行数据库连接设计时遇到了一些问题。我想要实现的是为我的应用程序数据库连接提供一个集中的连接和配置文件。因此,我创建了如下文件名database.js。

const Sequelize = require("sequelize");
const dbConfig = require("../../config/database.json");

const db = {};

sequelize = new Sequelize({
  dialect: dbConfig.dialect,
  database: dbConfig.database,
  username: dbConfig.username,
  password: dbConfig.password,
  host: dbConfig.host,
  port: dbConfig.port,
  operatorsAliases: false,
  logging: false,

  pool: {
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000
  }
});

db.Sequelize = Sequelize;
db.sequelize = sequelize;

module.exports = db;

如果有任何脚本要使用数据库,则只需要求database.js文件。但是,当我的脚本完成时会出现问题,因为sequelize连接没有关闭,进程没有退出(终端挂在那里)。

我试图在finally块上调用 close 函数,但这导致其他查询脚本无法工作(如果我在每个查询块上都调用它),原因是它们共享同一时刻。完成第一个查询后,连接将关闭。

sequelize
  .query("SELECT * FROM users WHERE id = ?", {
    replacements: [userId],
    type: sequelize.QueryTypes.SELECT,
    model: User,
    mapToModel: true
  })
  .then(users => {    
    console.log(users);
  })
  .finally(() => {
    sequelize.close();
  });

我可以关闭上一个查询的连接,但是很愚蠢的是,每当我有一个新查询最终需要执行时,我就不得不将关闭位置移到新查询块。

我正在寻找一个干净的代码,该代码可以帮助维护数据库连接,并在执行所有脚本时能够自动关闭连接。

1 个答案:

答案 0 :(得分:0)

sequelize.close()返回承诺,因此请使用异步功能并调用 await sequelize.close()