为什么当我将HTTP方法设置为*时,Hapi不匹配这个path

我的目标是创build一个路由来代理请求到特定的path到远程API。 我遇到麻烦使这个路线匹配GET请求。 POST请求匹配,并且调用通过。 例如,从浏览器到/ api /文件的代理到目的地的POST请求成功。 尽pipe如此,Hapi用404响应GET / api /文档。 我可以为方法键创build两个不同值的完全相同的路由,但看起来并不干燥。

server.route({ path: '/api/{path*}', method: '*', config: { handler: { proxy: { passThrough: true, mapUri: function (request, callback) { var baseUri = 'https://remote/services/v1'; var resourceUri = request.path.replace('/api', ''); var destinationUri = baseUri + resourceUri; server.log('Proxying to: ' + destinationUri); callback(null, destinationUri); } } } } }); server.route({ method: 'GET', path: '/{path*}', handler: { file: '../build/index.html' } }); 

根据文档 ,当您在路由中使用通配符时,只有在未find完全匹配的情况下才匹配。 你的'catchall'路由的方法匹配的路线和方法更具体,所以它似乎是通过/ {path }路线而不是。

方法 – (必需)HTTP方法。 通常是“GET”,“POST”,“PUT”,“PATCH”,“DELETE”,“OPTIONS”中的一个。 任何HTTP方法都是允许的,除了“HEAD”。 使用“*”匹配任何HTTP方法(只有在找不到完全匹配的情况下,与特定方法的任何匹配将被赋予比通配符匹配更高的优先级)。 可以分配一个方法数组,其结果与使用不同方法手动添加相同path的结果相同。

您可能可以通过使用通配符来捕获全部数据或为代理路由传递一个数组来解决这个问题,而不是使用通配符。