我有应用程序,其中有公共(public)路线和授权路线。公共(public)路由也应该通过身份验证,但如果身份验证失败,也没关系。
所以我有两个路由器:
var publicRoutes = express.Router();
var secretRoutes = express.Router();
publicRoutes
.use(auth)
.use(ignoreAuthError);
publicRoutes.get('/public', function(req, res){
res.status(200).send({message: "public"});
});
secretRoutes
.use(auth)
.use(handleAuthError);
secretRoutes.get('/secret', function(req, res){
res.status(200).send({message: "secret"});
});
...
app.use(publicRoutes);
app.use(secretRoutes);
现在一切正常,但如果我更改
app.use
的顺序公共(public)路线引发身份验证错误。此外,我无法收到任何 404、500 等错误,因为它们都经历了身份验证错误。很明显,正在发生的事情是
Router.use()
正在应用于具有相同根的所有路由 - 在本例中为 "/"
因此,我想如果我只使用
auth
所有路由上的中间件,然后将其他中间件直接添加到路由它应该可以正常工作。但这有点让我有多个路由器。我希望如果我使用
Router.use()
仅当该特定路由器与它设置的任何路由匹配时,中间件才会应用,而不是改变其他路由器的行为。我理解正确吗?有什么方法可以处理这个问题,而不必为每条路由添加中间件?
最佳答案
有同样的问题,感谢@Explosion Pills 评论解决了。
错误:
app.use(secretRoutes); // router.use calls won't be scoped to "/secret"
app.use(publicRoutes); // public routes will be impacted
好:
app.use("/secret", secretRoutes); // router.use calls will be scoped to "/secret"
app.use("/public", publicRoutes); // public routes won't be impacted
关于node.js - ExpressJS仅将中间件应用于路由器中的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35489372/