我想拥有受保护和不受保护的路由,并使其成为未定义路由的请求将返回404,即使在用户未经身份验证的情况下也是如此。我遇到的问题是,身份验证中间件在除其之前定义的路由之外的所有路由上运行,因此任何未定义的路由都会返回身份验证失败而不是404。这是问题的示例:
var app = express();
var router = express.Router();
router.get('/', function(req, res) {
res.send('unprotected route');
});
// best auth ever
router.use(function(req, res, next) {
if(req.body.token) {
return next();
}
res.send('auth failed');
});
router.get('/protected', function(req, res) {
res.send('protected route');
});
/// catch 404
router.use(function(req, res) {
res.sendStatus(404);
});
app.use('/', router);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,没有令牌的随机路由请求(例如/ whatever)将返回“ auth failed”而不是404。如何在Express中解决此问题?