Ошибка при объединении Express Router с вызовом Massive.js db - PullRequest
0 голосов
/ 01 октября 2018

При выполнении асинхронного / ожидающего вызова базы данных с экспресс-маршрутизатора на postgres db через экземпляр mass.js , правильный ответ от db получен, но, по-видимому, маршрутизатор возвращается до завершения асинхронной функции;поэтому тестовый вызов возвращает undefined.Из консоли (ниже) кажется ясным, что асинхронная функция не ожидает> _ <</p>

Обертывание маршрутизатора для передачи экземпляра приложения, вызывающего проблему?

app.js

const app = express();
const massiveInstance = require("./db_connect");
const routes = require("./routes");

const PORT = 3001;
const server = massiveInstance.then(db => {
  // Add db into our app object
  app.set("db", db);

  app.use("/api", routes(app));

  app.listen(PORT, () => {
    console.log("Server listening on " + PORT);
  });
});

rout.js

const router = require("express").Router();
const { countRegions } = require("./db_queries");

const routes = app => {
  const db = app.get("db");

  router.get("/regions/count", async (request, response) => {
    try {
      const total = await countRegions(db);
      console.log(`There are ${total} regions.`);
      response.send(`There are ${total} regions.`);
    } catch (err) {
      console.error(err);
    }
  });

  return router;
};

module.exports = routes;

db_queries.js

const countRegions = db => {
  db.regions.count().then(total => {
    console.log(`db has ${total} count for regions`);
    return total;
  });
};

module.exports = {
  countRegions,
};

консольный вывод Server listening on 3001 There are undefined regions. db has 15 count for regions

1 Ответ

0 голосов
/ 01 октября 2018

Вы не возвращаете обещание, возвращенное методом then в countRegions.Таким образом, вы должны добавить return в ваш код следующим образом

const countRegions = db => {
  //here
  return db.regions.count().then(total => {
    console.log(`db has ${total} count for regions`);
    return total;
  });
};

или просто сделать,

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