如何在每个路由中存储用户的对象
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');
}
我将 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');
}