Как мне делегировать запрос на конкретный маршрут в выражении nodejs? - PullRequest
0 голосов
/ 18 октября 2018
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 голосов
/ 18 октября 2018

Я сделал следующее

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);
});

Это работает, но мне не терпится узнать, есть ли другой способ сделать это.

0 голосов
/ 18 октября 2018

Я использую app all и отправляю запрос после изменения URL.Вы также можете перенаправить его на diff.сервер, например

  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 ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...