使用Sequelize在一个文件中进行身份验证

时间:2018-07-02 09:49:20

标签: node.js express sequelize.js

我正在尝试使用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 });
};

谢谢您的帮助! :)

1 个答案:

答案 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);
  });