Node.js Hapi路径路径

时间:2017-08-25 15:51:39

标签: javascript node.js routing hapijs

我需要在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*}'

它适用于上述两个请求,但第二个请求.params.deviceId最后包含一个'/'字符...

2 个答案:

答案 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']),
        }
   }
}