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

标签 javascript express model-view-controller promise

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

相关文章:

node.js - 使用 NodeJS 和 ExpressJS 存储全局对象的最佳方式是什么

javascript - ember.js 和服务器

javascript - node.js 机器人框架 universalbot beginDialogAction 用法?

javascript - 当调用不带括号的对象函数时,它如何显示自定义消息而不是返回整个函数?

javascript - 使用 Object.create 而不是 setPrototypeof

c# - MVC 3 复选框验证

model-view-controller - 从 global.asax 访问 RequestContext

javascript - 在将字符串解析为 javascript 和 JSON 中的对象时遇到问题

javascript - 在expressjs中的回调之间传递路由参数的最佳方法

node.js - ExpressJS - Elastic Beanstalk 502 错误网关