当我在中间件中重写url时,express将转到下一个第一个中间件,但即使该中间件匹配模式路径也不会转到下一个中间件。下面的示例代码。当我浏览http://localhost:3000时,控制台日志消息
中间件1
中间件2
这样就不会跳到中间件3
const express = require('express')
const app = express()
app.get('/',function (req, res, next) {
// i want to rewrite url to http://localhost:3000/next but not redirect page
req.url = req.protocol + '://' + req.get('host') + req.originalUrl + 'nxt'
console.log('middleware1');
next()
})
app.use('/nxt',function (req, res, next) {
console.log('middleware2');
next()
})
app.use('/nxt',function (req, res, next) {
console.log('middleware3');
next()
})
app.listen(3000);
但是当我浏览URL http://localhost:3000/nxt时,控制台日志消息
中间件2
中间件3
这样就跳到了中间件3
或者,如果我通过“ app.get”或“ app.all”更改“ app.use”,当我浏览URL http://localhost:3000时,它仍会跳转到中间件3
请为我解释为什么?那是个错误吗?谢谢!
最佳答案
您可以简单地做-
app.get('/',function (req, res, next) {
console.log('middleware 1');
req.path = req.url = '/next';
next();
});
app.use('/next',function (req, res, next) {
console.log('middleware2');
next()
});
app.use('/next',function (req, res, next) {
console.log('middleware3');
next();
});
它将打印。
middleware1
middleware2
middleware3