如何在每条路线

时间:2015-10-01 06:44:45

标签: node.js ejs

我将navbar.ejs设置为部分,以便我不需要再次重写它。每条路线都需要navbar.ejs。我使用护照进行Auth

  <% if (!user) { %>
        <li><a href="/signup">Signup</a></li>
        <li><a href="/login">Login</a></li>
    </ul>
    <% } else{ %>
      <li><a href="/dashboard">Dashboard</a></li>
      <li><a><%= user.profile.name %></a></li>
   <% } %>

路线示例

app.get('/', function(req, res) {
   res.render('home');
}

app.get('/dashboard', isLoggedIn, function(req, res) {
   res.render('dashboard', { user: req.user });
}

app.get('/about', function(req, res) {
   res.render('about');
}

对于user's object的路由,因为响应在呈现时工作正常,但其他路由将继续显示

user is not defined

我知道明显的解决方案是在每一条路线中传递user's object,但这确实是疯了。

想象一下,如果我必须这样做

 app.get('/1', function(req, res) {
       res.render('/1', {user: req.user});
 }
app.get('/2', function(req, res) {
       res.render('/2', {user: req.user});
    }

app.get('/3', function(req, res) {
       res.render('/3', {user: req.user});
    }

app.get('/4', function(req, res) {
       res.render('/4', {user: req.user});
    }

app.get('/5', function(req, res) {
       res.render('/5', {user: req.user});
    }

如果需要身份验证的路线,我真的不介意通过user's object,但简单的路线,如家,关于或联系,我觉得不需要传递。< / p>

1 个答案:

答案 0 :(得分:0)

如果您不想在每条路线中继续传递用户的对象,那么您必须设置中间件

在护照配置后的某处添加以下代码

app.use(function(req, res, next){
   res.locals.user = req.user;
});

然后您不再需要在每个路径中传递用户的对象

app.get('/1', function(req, res) {
       res.render('/1');
 }
app.get('/2', function(req, res) {
       res.render('/2');
    }