我正在尝试将 MVC(ish)架构用于一个非常具体的用例,到expressjs中。 我认为我遇到了 promise 问题,但我仍然无法在这里正确调试问题。
关于架构: 路由器调用将触发实际上是服务层中类的方法的函数。 ex: router.get('/users/list') -triggers-> userService.listAll() -返回用户数组->res.render('apage',{users:users}); (用户是包含返回值的变量)..
虽然 userService 能够访问数据源并返回数据,但路由器内的“users”变量不会受到任何影响。
实际代码是: 用户.js
router.get('/dashboard', function(req, res) {
var users= userService.listAll();
res.render('dashboard.twig', {users: users});
});
UserService.js
async listAll(){
await utilisateurModel.find({}).then(
function(data){
console.log("data is:"+JSON.stringify(data));
return data;
});
}
知道如何解决这个问题吗?
最佳答案
您对 Promise 和 async/await
有很多错误。
listAll
是一个异步函数,您必须使用 await
关键字来“获取”值。
UserService.js
async listAll() {
const data = await utilisateurModel.find({});
console.log("data is:" + JSON.stringify(data));
return data;
}
用户.js
router.get('/dashboard', async function (req, res) { // async function
var users = await userService.listAll(); // await keyword
res.render('dashboard.twig', { users: users });
});
关于javascript - Expressjs MVC 在路由器中无法让 listAll() 从 mongoose 返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60555942/