Аутентификация в одном файле с помощью Sequelize - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь использовать 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 голосов
/ 02 июля 2018

Как ссылка объясняет,

Sequelize настроит пул соединений при инициализации, поэтому в идеале вам следует создавать только один экземпляр для каждой базы данных, если вы подключаетесь к БД из одного процесса.

Таким образом, должен быть один экземпляр, вероятно, определенный в отдельном модуле:

const Sequelize = require("sequelize");

module.exports = new Sequelize(...);

, который импортируется как в промежуточное программное обеспечение, так и в основные модули. Как ссылка также утверждает, что 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);
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...