如何在app.locals函数中使用带有express的节点返回值

时间:2019-04-29 06:11:38

标签: javascript node.js mongodb express

我正在研究nodejs表达并实现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");
    }
});
}

如果条件执行,则不返回允许值1。

还尝试了take req和callback perameter并返回值,但是在此函数中都没有用。

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。

reference

1 个答案:

答案 0 :(得分:1)

显示“回调不是函数”是因为未定义回调函数。因此,请定义

之类的函数
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;
    }
});

}

look at this