express4.x 版本中res.local不起作用。
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
</head>
<body>
<h1><%= lang %></h1>
<% if(authenticated){ %>
<p>Welcome back, <%= me.first%></p>
<a href="/logout">Logout</a>
<% }else{ %>
<ul>
<li><a href="/login">Login</a></li>
<li><a href="/signup">Signup</a></li>
</ul>
<% } %>
</html>
app.use(function(req,res,next){
if(req.session.loggedIn){
res.locals.authenticated = true;
MongoClient.connect(url, function(err, db){
console.log("Connected correctly to server");
var collection = db.collection('users');
collection.findOne({id:{$oid:req.session.loggedIn}},function(err,doc){
if(err) throw err;
res.locals.me = doc;
next();
})
});
}else{
res.locals.authenticated = false;
next();
}
})
最后运行的结果是authenticated是undefined,不知道出现这种错误的原因是不是我的语法有问题?请前辈们解惑,谢谢。
1 回复
在你的这段程序中,authenticated
应该是只能为true或false的,如果res.locals.authenticated=true
或res.locals.authenticated=true
没有被执行,
那么渲染模板的时候就不存在authenticated
这个变量,在模板中执行到<% if(authenticated){ %>
时是会报错的。