При выполнении асинхронного / ожидающего вызова базы данных с экспресс-маршрутизатора на 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