我正在研究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。
答案 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;
}
});
}