首页 > 解决方案 > 如何在 app.locals 函数中使用带有 express 的节点返回值

问题描述

我正在研究 nodejs express 并实现 app.locals 功能

在视图(ejs 模板)文件中:-

<% if(someHelper('/admin/dashboard',req.user._id)){ %>
        <li>
            <a href="/admin/dashboard">
                <i class="fa fa-user">
                </i>
                <span>
                    Create Chairman
                </span>
            </a>
        </li>
<% } %>

在 app.js(server.js) 文件中:-

app.locals.someHelper = function(route_name,user_id) {

user.find({user_id:user_id, route_name:route_name}, function(err, user_per){
if(err) return false;
    if(typeof user_per != 'undefined' && user_per.length > 0){
            return true;
            console.log("true");
    } else {
        return false;
        console.log("false");
    }
});
}

当 if 条件被执行时,则不返回允许的值 1。

还尝试了获取 req 和回调参数并返回值,但两者在此函数中都没有用。

app.locals.someHelper = function(route_name, user_id, callback) {
user.find({ 
    user_id: user_id,
    route_name: route_name
}, function(err, user_per) {

    if(typeof user_per != 'undefined' && user_per.length > 0){
        // permitted
        return callback(1);
    }

    callback(0);
});
}

回调不是函数

如果部分未执行,我希望返回允许的 0,否则返回允许的 1。

参考

标签: javascriptnode.jsmongodbexpress

解决方案


显示“回调不是函数”是因为您没有定义回调函数。所以你请定义这样的功能

function callback(value){
    console.log(value)
}

然后你可以将回调传递给你的函数

app.locals.someHelper(..,...,callback);

让我在片段中举一个简单的例子,你可以看看它。

helper = function(val, callback){
    if(val === 1)
        callback(true)
    else 
        callback(false)
}

function callback(value){
    console.log(value)
}

helper(1, callback);
helper(2, callback);

app.locals.someHelper = function(route_name,user_id) {
var permitted = 0;
user.find({user_id:user_id, route_name:route_name}, function(err, user_per){
if(err) return false;
if(typeof user_per != 'undefined' && user_per.length > 0){
        return true;
    }
else {
    return false;
    }
});

}

看这个


推荐阅读