我正在尝试使用Sequelize,但我不知道该如何解决:我只想在start.js中连接一次,而不是在每个文件中连接。
这是我的start.js:
const Sequelize = require("sequelize");
// import environmental variables from our variables.env file
require("dotenv").config({ path: "variables.env" });
// Connect to our Database
const sequelize = new Sequelize(
process.env.DATABASE_NAME,
process.env.DATABASE_USER,
process.env.DATABASE_PASSWORD,
{
host: process.env.DATABASE_HOST,
dialect: "postgres",
operatorsAliases: false,
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
}
}
);
// Try to authenticate to our databse
sequelize
.authenticate()
.then(() => {
console.log(" Database connection successful !");
})
.catch(err => {
console.error(" Database connection error...", err);
});
// Start our app!
const app = require("./app");
app.set("port", process.env.PORT || 7777);
const server = app.listen(app.get("port"), () => {
console.log(` Express running → PORT ${server.address().port}`);
});
这是我要执行查询时的随机文件(userController.js):
const Sequelize = require("sequelize");
// This is the problem:
const sequelize = new Sequelize; // (.connection() ?)
exports.getUsers = async (req, res) => {
// Query the DB for a list of all users
const users = await sequelize.query("SELECT * FROM profils");
res.send({ users });
};
谢谢您的帮助! :)
答案 0 :(得分:1)
如the reference所述,
Sequelize将在初始化时设置连接池,因此,如果您要从单个进程连接到数据库,则理想情况下,每个数据库只能创建一个实例。
因此应该有一个实例,可能在单独的模块中定义:
const Sequelize = require("sequelize");
module.exports = new Sequelize(...);
在中间件和主要模块中都导入的。正如the reference也指出的那样,authenticate
并不是真正必要的,但可以用作初始化例程的步骤:
require("dotenv").config({ path: "variables.env" });
const sequelize = require('./db');
// for testability purposes
module.exports = sequelize
.authenticate()
.then(() => {
// Start our app!
const app = require("./app");
...
// for testability purposes
return app;
})
.catch(err => {
console.error(err);
});