Express app.listen возвращает Promise {Сервер {}} - PullRequest
0 голосов
/ 09 апреля 2020

У меня работает express сервер, я столкнулся с проблемой при написании юнит-тестов. У меня есть функция запуска, которая подключается к базе данных, а затем возвращает сервер с app.listen (). Проблема в том, что если я возвращаю app.listen из функции asyn c, я получаю Обещание с сервером внутри него, я попытался выполнить это обещание, дождаться этого обещания, вернуть сервер из .then ( ). Я не хочу обещание, я хочу сервер.

express .ts

import express from 'express';

const app = express();

export { app };

startup.ts

import { app } from './express';
import { sequelize } from './sequelize';

app._startup = (async() => {
  switch (process.env.NODE_ENV) {
    case "production":
      await sequelize.authenticate();
      break;
    case "test":
      await sequelize.sync({ force: true });
      break;
    case "development":
    default:
      await sequelize.sync({ force: false });
      break;
  }
})().then(() => true);

export { app };

server.ts

import { app } from './startup';

// export const server = app.listen(8080); // This works

export const server = (
  async() => {
    await app._startup;
    return app.listen(8080); // This does not work
  }
)();

Поскольку сервер {} находится внутри Promise {}, все мои модульные тесты не пройдены

console.log(server);
// => Promise { Server { } }

Как можно Я разрешаю это обещание перед экспортом сервера?

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Вы можете дождаться завершения функции async. Поскольку вы определяете server как функцию async, вы можете использовать ключевое слово await, чтобы дождаться его завершения. Реализация выглядит следующим образом:

import { app } from './startup';

export const server = app.listen(8080);
export const server = await (  // use await to wait
  async() => {
    await app._startup;
    return app.listen(8080); // This does not work
  }
)();
0 голосов
/ 09 апреля 2020

Спасибо за ваш комментарий @ jfriend00

Решение выложено ниже

const server = createServer(app);

(async() => {
  await app._startup;
})().then(() => server.listen(8080));

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