如何重写节点js请求

时间:2018-04-19 06:13:08

标签: node.js express request

可以修改节点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();
});

上面的代码无效,请告诉我我做错了什么。

2 个答案:

答案 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();
});