在我的Sails.js应用程序中,我正在尝试从我的数据库中返回已批准用户的数量,并使用count()查询在我的视图中使用count变量。我已将下面的代码写到我的Users.js模型文件中:
countapproved: function(req, res) {
Users.count({ approval_state: 'approved' }).exec(function(err, found) {
if (err) {
console.log('error.');
}
console.log(found);
return found;
});
}
并且,我试图通过此EJS片段在我的视图中获取值:
<%= Users.countapproved() %>
问题是console.log(找到);返回正确的值,但在视图中我看到&#39; undefined&#39;。
编辑:用户模型可全局访问。
edit2:在我的视图/users/countapproved.ejs中使用res.view({count:count})我没有问题;但我试图从homepage.ejs。
访问它感谢您的帮助。
答案 0 :(得分:0)
我不确定ejs
模板是否支持开箱即用的函数传递。谷歌搜索肯定会有很多棘手的方法。
然而,在担心这一点之前,我不认为你的countapproved
方法正在做你想要的,因为它有一些异步性问题。当它调用Users.count().exec()
时,它会异步执行。在运行exec
的回调之前,代码继续在下面,找到函数的结尾,返回null。当运行回调中的代码时,该函数已经返回(尽管,console.log运行得很好)。
所以,如果我是你,我不会试图让我的模板运行一个函数,尤其是异步函数。我会使用回调参数更新您的Users
方法:
countapproved: function(callback) {
Users.count({ approval_state: 'approved' }).exec(function(err, found) {
if (err) {
console.log('error:' + err);
}
console.log(found);
callback(err, found);
});
}
然后,当您想要视图中的批准计数时,您必须通过控制器方法进行路由。在/config/routes.js
:
'GET /someroute': 'SomeController.someMethod'
在/api/controllers/SomeController
:
module.exports = {
someMethod: function(req, res) {
Users.countapproved(function(err, found) {
if (err) {
// handle the error
}
return res.view('someView',{found: found});
});
}
};