Node.js / JavaScript дождитесь завершения работы требуемого модуля - PullRequest
0 голосов
/ 15 марта 2020

У меня есть приложение express. js, которое использует mon goose для подключения к MongoDB. в настоящее время у меня есть код mon goose для подключения к БД в отдельном файле, поскольку он часто используется в модулях
, это код для соединителя

const mongoose = require("mongoose");

let host = process.env.DB_HOST;
let port = process.env.DB_PORT;
let name = process.env.DB_NAME;

mongoose
 .connect(`mongodb://${host}:${port}/${name}`, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useCreateIndex: true
 })
 .then(() => {
     console.log("Connection established with DB");
 })
 .catch(error => {
     console.log(`Error in conecting to database!\n${error}`);
 });

. файл моего основного приложения. js, использующий

require("./database/connector")

, после этого запуск сервера express с

app.listen(PORT,()=>{console.log(`server started at port ${PORT}`);})

Пока все работает нормально, я получаю вывод

   server started at port 3000
   Connections established with DB

Что в основном означает, что соединение с базой данных происходит после запуска сервера. По причинам, в которые я не буду сейчас углубляться, мне нужен способ гарантировать, что сервер не принимает какие-либо запросы, пока база данных не будет соединение установлено (это не обязательно, но это значительно облегчит мой процесс тестирования, я использую jest и supertest для тестирования)

Какой лучший способ выполнить это sh?

1 Ответ

0 голосов
/ 15 марта 2020

Существует два варианта:

  1. Привязать порт сервера, непосредственно прослушивающий событие подключения к базе данных, или вернуть и передать обещание или источник событий из модуля базы данных в модуль веб-приложения.
mongoose
 .connect(`mongodb://${host}:${port}/${name}`, {
    //...
 })
 .then(() => {
    app.listen(PORT,()=>{console.log(`server started at port ${PORT}`);})
 })
Добавьте в ваше веб-приложение express. js промежуточное ПО, которое проверяет, подключен ли сервер базы данных. (Он должен быть добавлен к маршрутизатору в качестве первого маршрута.)
var app = express();

// the first route
app.use((req, res, next) => {
  // if database connected, continue using following routes
  if (mongoose.connection.readyState == 1) return next();
  // otherwisetell people the server isn't ready.
  res.status(500);
  res.end();
})

// continue what you were doing before
app.use(...)
app.all('/some-path', ...)

app.listen(PORT,()=>{console.log(`server started at port ${PORT}`);})


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...