gpt4 book ai didi

javascript - Expressjs MVC 在路由器中无法让 listAll() 从 mongoose 返回数据

转载 作者:行者123 更新时间:2023-12-02 21:33:50 25 4
gpt4 key购买 nike

我正在尝试将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com