我试图按颜色计算用户数
我的代码在userController.js上
'dashboard': function(req, res) {
var totalAvailable = user.count({
value: 'blue'
}).exec(function countCB(error, found) {
console.log(found);
});
res.view({totalAvailable});
},
当我刷新仪表板时,它会在控制台中计算值为蓝色的用户数量,现在为50,我想在我的仪表板上显示50个
我使用了<%= totalAvailable %>
在控制台上显示未定义它输出50
答案 0 :(得分:0)
这永远不会奏效。因为sails中的 find,findOne,count,create,destroy 等函数是异步的,不会返回任何内容。
那个是你代码中的第一个问题,另一个是res.view()
,这个函数用于渲染模板( .ejs 文件)而不是jsons数组。完成它的正确方法是。
'dashboard': function(req, res) {
//The correct way.
var totalAvailable;
user.count({value: 'blue'})
.exec(function countCB(error, found) {
console.log(found);
res.ok(found);// not this--> res.view({found});
});
},
上面的代码是正确的方法。
在找到
中填充结果后执行res.view()我提到的另一种错误方式如下。
'dashboard': function(req, res) {
//This is extremely wrong way never do this
var totalAvailable;
user.count({value: 'blue'})
.exec(function countCB(error, found) {
console.log(found);
totalAvailable=found;
});
res.ok(totalAvailable);
}
这是错误的方法,因为 count()是异步函数,不会在执行堆栈上推送。而是使用一些timeOut(队列中的等待时间)将异步函数附加到事件队列。
非异步函数直接推送到执行堆栈并执行。 因此res.ok()不会被阻止并在 user.count()填充结果之前先执行。
所以在节点中执行代码时总要考虑同步性
阅读这些。 https://www.codementor.io/nodejs/tutorial/manage-async-nodejs-callback-example-code https://blog.risingstack.com/node-js-best-practices/
官方nodejs docs https://nodejs.org/dist/latest-v4.x/docs/api/