express4.x 版本中res.local不起作用。
发布于 10 年前 作者 darrenCoding 4482 次浏览 最后一次编辑是 8 年前 来自 问答
<!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=trueres.locals.authenticated=true没有被执行, 那么渲染模板的时候就不存在authenticated这个变量,在模板中执行到<% if(authenticated){ %>时是会报错的。

回到顶部