Expressjs: изменение маршрута для управления версиями - PullRequest
0 голосов
/ 11 декабря 2018

В приложении ExpressJS рассмотрим для заданных путей

GET /v1/users/detail
GET /v2/users/detail

маршрутизаторы:

// v1/users.js
router.get('/v1/users/detail', (req, res, next) => res.send('v1'));

// v2/users.js
router.get('/v2/users/detail', (req, res, next) => res.send('v2'));

Так как я планировал иметь основанное на заголовках управление версиями, я планировал сделать так,

// users.js
router.get('/users/detail', routesVersioning({
    '1.0.0': (req, res, next) => res.send('v1'),
    '2.0.0': (req, res, next) => res.send('v2'),
}));

В основном мои клиенты будут использовать те же URL-адреса (версия в пути), но мое промежуточное программное обеспечение должно переписать URL с заголовками версий.

Что я пробовал:

app.use('/v(1|2)/users/*', (req, res, next) => {
  const [_, version] = req.originalUrl.split('/');
  if (version === 'v1') {
    req.version = '1.0.0';
  } else {
    req.version = '2.0.0';
  }
  // req.originalUrl = req.originalUrl.replace(/\/v(1|2)/i, '');
  req.url = req.originalUrl.replace(/\/v(1|2)/i, '');
  next('route'); // tried next(); too
});

app.get('/users/detail', routesVersioning({
        '1.0.0': (req, res, next) => res.send('v1'),
        '2.0.0': (req, res, next) => res.send('v2'),
    }));

Но это не сработало

1 Ответ

0 голосов
/ 11 декабря 2018

Это не сработает, поскольку req.url - это , который не просматривается экспрессом на каждом обработчике .Это будет проанализировано в начале.На самом деле изменение req.url или чего-либо внутри объекта req - это не то, что вы хотите сделать.

Вместо этого вы можете сделать следующее:

 app.use( '/v2', v2Router );
 app.use( '/v1', v1Router );

 const v1Router = express.Router(),
       v2Router = express.Router();

 v1Router.get( '/users/details', ( req, res ) => res.send( 'v1' ) );
 v2Router.get( '/users/details', ( req, res ) => res.send( 'v2' ) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...