我正在尝试在Express JS 4中进行URL重写。我读到的所有内容都说我应该能够覆盖中间件中的request.url属性。重写的两个现有Node模块使用此方法。但是,当我尝试这样做时:
app.use('/foo', function(req, res){
var old_url = req.url;
req.url = '/bar';
console.log('foo: ' + old_url + ' -> ' + req.url);
});
app.get('/bar', function(req, res) {
console.log('bar: ' + req.url);
});
它只是不起作用。
可能有用的一条注意事项:无论使用何种实际网址,上面的req.url
似乎始终为/
。 Express 4是否更改了URL的维护方式,而不是更新文档?如何在Express 4中完成URL重写?
答案 0 :(得分:7)
如果您希望在更改后继续处理,则必须在中间件中调用next()
以继续处理其他处理程序。
app.use('/foo', function(req, res, next){
var old_url = req.url;
req.url = '/bar';
console.log('foo: ' + old_url + ' -> ' + req.url);
next();
});
这个属性很像req.url;但是,它保留了原件 请求URL,允许您为内部自由重写req.url 路由目的。例如,app.use()的“安装”功能 将重写req.url以去除挂载点。
这肯定意味着您可以更改req.url以更改路由。
答案 1 :(得分:1)
答案 2 :(得分:0)
由于某些原因,重写req.url不适用于app.use(...)。 (Express 4.17.1)
改为使用app.get(...):
// this doesn't work
app.use('/foo', function(req, res, next){
req.url = '/bar';
next()
});
// this works
app.get('/foo', function(req, res, next){
req.url = '/bar';
next()
});