var express = require('express');
var router = express.Router();
router.use(function(req, res, next){
console.log(req.user)
if(!req.user){
res.redirect('/login');
}else{
res.locals.username = req.user.username;
return next();
}
});
//this won't work
router.get('/register', function(req, res, next) {
res.render('register');
});
第一个 block 很有意义并且正在运行,我能够拥有一个带有 protected 路由的登录系统。但同时它破坏了我的第二位,它会显示登录页面,尽管我尝试导航到 localhost:3000/register。
最佳答案
当您使用 router.use()
时,您是在告诉路由器在接下来的所有 roter.get()
路由中使用该函数中间件。所以在这里,顺序是有道理的。如果你关心秩序,你可以做@bloodyKnuckles 做的事。或者,如果您想为您的路线保留该模式,您可以执行以下操作:
// Routes that don't need authorization like register
router.get('home',...);
router.get('register',...);
// Use your authorization middleware
router.use(function(req, res, next){
console.log(req.user)
if(!req.user){
res.redirect('/login');
}else {
res.locals.username = req.user.username;
return next();
}
});
// At this point you're using the authorization middleware.
// Any routes declared from here will call authorization middleware before its handler.
router.get('profile', ...);
关于javascript - node.js中的路由堆叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37641986/