如何在每个路由中存储用户的对象

How to store a user's object in every routes

我将 navbar.ejs 设置为部分,这样我就不需要再次重写它。每条路线都需要 navbar.ejs。我正在使用护照进行身份验证

  <% 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,但是像home,about or contact这样简单的路由我觉得没必要传

如果你不想在每一个路由中都传递用户的对象,那么你必须设置一个中间件

在你的 passport 配置后的某处添加以下代码

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');
    }