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');
});
但这不起作用。
答案 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);
});
它可以工作,但是我很想知道是否还有其他方法可以实现。