可以修改节点js请求的url ?? 浏览器发送这样的请求
http://localhost/user/add
当它来到服务器时我想在我当前的请求中添加api,我的意思就像下面的请求。
http://localhost/api/user/add
为此,我写了一个中间件,但看起来不起作用。
app.use('*', function(req, res, next) {
if (req.baseUrl.indexOf('api') == -1) {
req.baseUrl = '/api' + req.baseUrl;
console.log('req.baseUrl');
console.log(req.baseUrl);
}
next();
});
上面的代码无效,请告诉我我做错了什么。
答案 0 :(得分:1)
请尝试指定 req.url 和 req.originalUrl 。它们是重写请求的关键点。 https://expressjs.com/en/api.html
这个属性很像req.url;但是,它保留了原始请求URL,允许您自由重写req.url以进行内部路由。例如,app.use()的“mount”功能将重写req.url以去除挂载点。
另一方面,express-urlrewrite是一个用于表达url重写的开源库。你可以从中获得灵感。
答案 1 :(得分:1)
您需要重新启动路由器以处理更新的网址:
app.use('*', function(req, res, next) {
if (req.baseUrl.indexOf('api') == -1) {
req.url = '/api' + req.url;
req.originalUrl = '/api' + req.originalUrl; //update all 3 just to be
safe.
req.baseUrl = '/api' + req.baseUrl;
console.log('req.baseUrl');
console.log(req.baseUrl);
app.handle(req, res); //re-fire router to handle updated urls
}
next();
});