В приложении 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'),
}));
Но это не сработало