将 Express Router 与 Massive.js 数据库调用结合使用时出错
Error when combining Express Router with Massive.js db call
当通过 massive.js 实例从 Express 路由器对数据库进行 async/await 调用到 postgres 数据库时,收到了来自数据库的正确响应,但路由器显然 returns 在异步之前功能完成;因此,测试调用 returns 未定义。从控制台输出(下方),似乎很明显异步函数没有等待 >_<
是否包装路由器以传递引起问题的应用程序实例?
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);
});
});
routes.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
您没有在 countRegions
方法中返回 then
返回的承诺。
所以你应该像这样在你的代码中添加 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();
当通过 massive.js 实例从 Express 路由器对数据库进行 async/await 调用到 postgres 数据库时,收到了来自数据库的正确响应,但路由器显然 returns 在异步之前功能完成;因此,测试调用 returns 未定义。从控制台输出(下方),似乎很明显异步函数没有等待 >_<
是否包装路由器以传递引起问题的应用程序实例?
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);
});
});
routes.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
您没有在 countRegions
方法中返回 then
返回的承诺。
所以你应该像这样在你的代码中添加 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();