我需要在Hapi服务器上匹配以下路由:
http://localhost:8080/messages/{deviceId}/?deviceType=phone
|___________________||________||_________||_______________|
1 2 3 4
详情:
我尝试按照以下方式执行,但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*}'
它适用于上述两个请求,但第二个请求.params.deviceId最后包含一个'/'字符...
答案 0 :(得分:0)
您可以将路径设置为
path: config.serverPath + '/messages/{deviceId}'
并使用request.query
获取查询参数。
答案 1 :(得分:0)
你可以这样做。无需编写cofig.serverPath。此外,您将不得不使用Joi来验证查询参数。
path: '/messages/{deviceId}',
handler: storyController.getAllPaginatedStories,
config: {
validate: {
query: {
deviceType: Joi.string().required().valid(['phone']),
}
}
}