如何将请求委托给nodejs express中的特定路由?

时间:2018-10-18 12:09:58

标签: javascript node.js express

const API_VERSION = {
    "authenticate"     : "v1",
    "users'"           : "v1",
    "requests"         : "v2",
}

我有以下路线:

app.use('/api/v1/authenticate', authenticate);
app.use('/api/v1/users', users);
app.use('/api/v1/requests', requestService);
app.use('/api/v2/requests', requestService_v2);

如果请求说出api/v2/authenticate,则应将其重新路由到api/v2/authenticate

我尝试过

app.use('/api/v2/*', (req, res, next) => {
    const originalUrl = req.originalUrl;
    const endPoint = originalUrl.match(/(?<=\/[^\/]*\/[^\/]*\/)[^\/]+(?=\/)/g)[0].toLowerCase();
    req.baseUrl = req.originalUrl.replace("v2", API_VERSIONS[endPoint]);
    next('route');
});

但这不起作用。

2 个答案:

答案 0 :(得分:0)

我使用app all,并在修改网址后通过管道发送请求。您也可以将其重新路由到差异。服务器,例如

  API_V1 = '/api/v1'
  app.all('/api/v2/*', (req, res)->
    url = API_V1 + req.url
    req.pipe(request[req.method.toLowerCase()](url, (error)->
      res.json({err: error}) if error?
    )).pipe(res).on
  )

我没有尝试过您的代码,但也许只是调用next()

答案 1 :(得分:0)

我做了以下

app.use('/api/v2/*', (req, res, next) => {
    const originalUrl = req.originalUrl;
    const endPoint = originalUrl.match(/(?<=\/[^\/]*\/[^\/]*\/)[^\/]+(?=\/)/g)[0].toLowerCase();
    const url = req.originalUrl.replace("v2", API_VERSIONS[endPoint]);
    res.redirect(307, url);
});

它可以工作,但是我很想知道是否还有其他方法可以实现。