我有一个工作用户注册/登录页面,唯一剩下的就是根据用户是否登录来制作内容。看完之后我想出了这个:
app.use(function(req, res, next) {
db.users.find({rememberToken: req.cookies.rememberToken}, function(err, foundUser) {
if (err) { next(); }
if (foundUser[0].length === 0) {
res.locals.isLoggedIn = false;
next();
} else {
res.locals.isLoggedIn = true;
next();
}
});
});
然后只是为了测试它我在我的Jade模板中做到了这一点:
!!!
html
head
#{isLoggedIn()}
但所有发生的事情都表明未定义isLoggedIn。
我找不到很多关于这个主题的文档,所以任何信息都会很棒。谢谢!
我基本上想让函数返回true或false,以便我可以根据它加载内容。
答案 0 :(得分:3)
首先要获得函数的结果,你必须调用函数不像你那样渲染元素。要调用该函数,请使用以下语法:
p #{isLoggedIn()}
要呈现HTML / jade的一部分,您可以使用类似
的内容- if (isLoggedIn())
p User is logged in
您的代码示例的真正问题在于您从视图中访问数据库,并且您在视图中使用了无效的回调(下一个)。
更好的工作方式是使用一些中间件在res.locals中设置isLoggedIn
字段。
var isLoggedIn = function(req, res, next) {
db.users.find({rememberToken: req.cookie.rememberToken}, function(err, foundUser) {
if (err) { console.log('We have an error ' + err ); next();}
if (foundUser[0].length === 0) {
console.log('We could not find the user with the rememberToken ' + req.cookie.rememberToken);
res.locals.isLoggedIn = false;
next();
} else {
console.log('We found the user with the rememberToken ' + req.cookie.rememberToken);
res.locals.isLoggedIn = true;
next();
}
});
};
app.get('/yourroute', isLoggedIn, routes.yourroute);
答案 1 :(得分:1)
你可以让它发挥作用:
!!!
html
head
| #{isLoggedIn()}
或在条件陈述中:
!!!
html
head
- if (isLoggedIn())
// do something
- else
// do something else
但为什么不将isLoggedIn
设为布尔变量而不是函数?我很确定从Jade调用异步函数是行不通的。