【发布时间】:2017-05-24 08:13:06
【问题描述】:
我正试图围绕 ExpressJS 4 中的中间件。
如果我理解正确的话,中间件是按声明顺序应用的,您可以在不同级别“绑定”它们。
这里我试图在路由器级别绑定一个中间件。
function middleware(req, res, next) {
console.log("middleware");
res.write("middleware");
next();
}
function handler(req, res) {
console.log("OK");
res.status(200).send('OK');
}
const router1 = express.Router();
const router2 = express.Router();
router1.get("/1", handler);
router2.get("/2", handler);
在/test/2 上调用/test/1 和middleware 时,我会打印OK,但以下内容除外。
app.use("/test/", router2.use(middleware), router1);
但是输出好像是反转的,相当于:
app.use("/test/", router2, middleware, router1);
我真正想要的是只有第一个路由器使用中间件。 换句话说,将中间件的使用范围限定为第一个控制器。
我可以轻松地交换 router1 和 router2 的顺序,但我的另一个要求是因为我的 router2 实际上使用了一条捕获所有请求的路由 (/:id),我需要让它最后。
我在这里缺少什么,我该怎么做?
编辑澄清:
我最想要的是这样的东西:
/
|-test/
|-route // use middleware
|-something // use middleware
|-another // use middleware
...
|-:id // without middleware
这就是为什么我有一个路由器,其中有很多路由在我想要中间件的router1 下。
和router2 没有中间件的包罗万象。
【问题讨论】:
-
好的,我知道为什么
app.use("/test/", router2.use(middleware), router1);似乎被颠倒了。我希望中间件能够包装我的所有路由,但它会将其作为层添加到最后一个位置。
标签: javascript node.js express router middleware