Sails.js模型函数在视图中返回undefined

时间:2017-09-01 09:53:11

标签: javascript node.js express sails.js

在我的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。

访问它

感谢您的帮助。

1 个答案:

答案 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});
        });
    }

};