javascript - Expressjs MVC 在路由器中无法让 listAll() 从猫鼬返回数据
问题描述
我正在尝试为一个非常具体的用例实现 MVC(ish) 架构到 expressjs 中。我想我有一个承诺问题,但我仍然无法在这里正确调试问题。
关于架构:路由器调用将触发实际上是服务层中类的方法的函数。例如:router.get('/users/list') -triggers-> userService.listAll() -returns array of users->res.render('apage',{users:users}); (用户是一个包含返回值的变量)..
虽然 userService 能够访问数据源并返回数据,但路由器内部的“users”变量不会受到任何影响。
实际代码是:users.js
router.get('/dashboard', function(req, res) {
var users= userService.listAll();
res.render('dashboard.twig', {users: users});
});
用户服务.js
async listAll(){
await utilisateurModel.find({}).then(
function(data){
console.log("data is:"+JSON.stringify(data));
return data;
});
}
知道如何解决这个问题吗?
解决方案
你对 Promise 和async/await
.
listAll
是一个异步函数,你必须使用await
关键字来“获取”值。
用户服务.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 });
});
推荐阅读
- websocket - 从与服务器位于同一 LAN 中的客户端调用 DNS 时出现 Websockets 错误(Signalr2 和核心)
- tensorflow - 如何在 GAN 训练中使用 TensorFlow Dataset API?
- c# - c# 并行写入 Azure Data Lake File
- python - 如何评估 mpmath 函数中的 numpy 数组?
- resize - MediaWiki 上的 GraphViz 点在编辑后被拉长
- java - 给定数字中连续 1 的最大数量
- r - 有效更改数据框中引用前一行值的变量
- javascript - 无法以角度 5 获取响应标题
- vba - Application.WorksheetFunction.Search 和 .IsNumber 在 VBA 中不起作用:类型不匹配错误;修复匹配函数字符限制
- c# - 如何使用通用查询生成器查询集合