如何在Express JS 4中进行URL重写

Jas*_*ker 4 node.js express

我正在尝试在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);
});
Run Code Online (Sandbox Code Playgroud)

它只是不起作用.

一个可能有用的注释:看起来req.url上面总是/与使用的实际URL无关.Express 4是否更改了URL的维护方式,而不是更新文档?如何在Express 4中完成URL重写?

jfr*_*d00 8

如果您希望在更改后继续处理,则必须调用next()中间件以使处理继续进行其他处理程序.

app.use('/foo', function(req, res, next){
    var old_url = req.url;
    req.url = '/bar';

    console.log('foo: ' + old_url + ' -> ' + req.url);
    next();
});
Run Code Online (Sandbox Code Playgroud)

文件req.originalUrl说:

这个属性很像req.url; 但是,它保留了原始请求URL,允许您自由重写req.url以进行内部路由.例如,app.use()的"安装"功能将重写req.url以去除挂载点.

这肯定意味着您可以更改req.url以更改路由.


相关回答:使用node.js重写url路径