gpt4 book ai didi

node.js - Express 动态路由被添加到静态路由中间件堆栈中

转载 作者:太空宇宙 更新时间:2023-11-04 02:27:34 26 4
gpt4 key购买 nike

我正在 Express 中定义静态和动态路由,并且我构建了一个通用响应程序来向客户端发送响应。响应者对于所有路由都是全局的,因此添加在末尾。

但是,当我定义静态路由时,匹配动态路由的中间件会在响应者之前添加到堆栈中。

举例说明:

server.get('/hello/test', function(req, res, next) {
console.log('/hello/test');
next();
});
server.get('/hello/:page', function(req, res, next) {
console.log('/hello/:page');
next();
});
server.use(function(req, res, next) {
res.status(200).send('test');
});

调用curl localhost:3000/hello/test将在调用响应者中间件之前console.log“/hello/test”和“/hello/:page”。我只想调用第一个匹配的路由中间件。

有什么办法可以防止这种行为吗?

最佳答案

next() 方法将控制权传递给下一个处理程序。您只需从路由中删除 next() 调用并将中间件放入函数中即可解决您的问题:

server.get('/hello/test', myMiddleware(req, res, next), function(req, res) {
console.log('/hello/test');
});
server.get('/hello/test_b', myMiddleware(req, res, next), function(req, res) {
console.log('/hello/test_b');
});
server.get('/hello/:page', myMiddleware(req, res, next), function(req, res) {
console.log('/hello/:page');
});
server.get('*', myMiddleware(req, res, next), function (req, res) {
res.type('txt').send('Not found');
});


function myMiddleware(req, res, next) {
console.Log("in midleware")
next();
}

关于node.js - Express 动态路由被添加到静态路由中间件堆栈中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29369016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com