javascript - 如何在 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。
解决方案
显示“回调不是函数”是因为您没有定义回调函数。所以你请定义这样的功能
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;
}
});
}
推荐阅读
- json - flutter : 嵌套的 json 解析列表
- javascript - 如何使用“saveAs”在服务器上直接下载pdf
- c# - 值不能为空。参数名称:val 在 VS Monogame 项目中
- javascript - 如何在angular js中设置$interval 24小时
- spring-boot - 如何验证rest服务的json请求
- c# - 为什么 Paralle.for 松得这么厉害
- angular - 如何获取对象数组值
- java - 在Android(Java)中将所选图像转换为base64字符串
- c# - 如何在 UWP 上的媒体元素中加载 Windows 音乐库?
- android - 如何动态隐藏视图android?