【发布时间】:2017-08-25 15:51:38
【问题描述】:
我需要在 Hapi 服务器上匹配以下路由:
http://localhost:8080/messages/{deviceId}/?deviceType=phone
|___________________||________||_________||_______________|
1 2 3 4
详情:
- 1 是我的服务器网址
- 2 是 路径
- 3 是一个名为 deviceId 的参数,它会根据请求而有所不同。
- 4 是一个查询参数,由请求的发射器附加。我不控制这个附加的查询参数,但我知道它总是会匹配 ?deviceType=phone。
我尝试执行以下操作,但 Hapi 服务器甚至没有启动..
server.route({
method: 'POST',
path: config.serverPath + '/messages/{deviceId}/?deviceType=phone',
handler: (request, reply) => {
}
});
然后我尝试了这个:
server.route({
method: 'POST',
path: config.serverPath + '/messages/{deviceId*2}',
handler: (request, reply) => {
const parameters = request.params.deviceId.split('/');
const deviceId = parameters[0];
const attachedQueryParameter = parameters[1]; // should match '?deviceType=phone'
}
});
{deviceId*2} 表示只有提供 2 个参数时,路由才会匹配。
然后我可以轻松提取参数。
当参数以“?”开头时,这条路线几乎可以正常工作。 (错误 404)... ...这正是我想要匹配的情况(请求的组件 n° 4 以'?'开头)。
谁能帮我解决这个棘手的问题?谢谢
再次尝试,仍然出现 404 错误...我的路径设置为:
path: config.serverPath + '/messages/{deviceId}'
如果我用这个 URL 做一个 POST 就可以了:
http://localhost:8080/messages/7d8a09d37d1e7b?deviceType=phone
但是如果我用这个做一个 POST:
http://localhost:8080/messages/7d8a09d37d1e7b/?deviceType=phone
它不起作用... 404 错误,说“未找到”。 我正在使用 hapi v15.0.1。
我找到了一个温度。此路径的解决方案:
path: config.serverPath + '/messages/{deviceId*}'
它适用于上述两个请求,但对于第二个请求,request.params.deviceId 在最后包含一个“/”字符...
【问题讨论】:
标签: javascript node.js routing hapijs