2017-08-25 29 views
0

我需要一個哈啤服務器上符合以下路線:Node.js的哈皮路線路徑

http://localhost:8080/messages/{deviceId}/?deviceType=phone 
|___________________||________||_________||_______________| 
      1    2   3   4 

詳細信息:

  • 1我服務器URL
  • 2是路徑
  • 3是一個參數,稱爲deviceId,即我根據要求會有所不同。
  • 4是查詢參數,它由請求的發射器附加。我不控制這個附加的查詢參數,但我知道它總是會匹配?deviceType = phone

我試着做如下,但哈皮服務器甚至沒有啓動..

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)... ...這正是我想要匹配的情況(組件編號爲的請求以'?'開頭)。

任何人都可以幫助我解決這個棘手的問題嗎?由於


再試,還是有404錯誤...我的路徑設置爲:

path: config.serverPath + '/messages/{deviceId}' 

,如果我做一個POST這個URL它的工作原理:

http://localhost:8080/messages/7d8a09d37d1e7b?deviceType=phone 

但是如果我用這個做POST:

http://localhost:8080/messages/7d8a09d37d1e7b/?deviceType=phone 

It不起作用... 404錯誤,說'找不到'。 我正在使用hapi v15.0.1。


我發現了一個溫度。

path: config.serverPath + '/messages/{deviceId*}' 

它適用於上述兩個請求,但第二個的request.params.deviceId包含在最後一個「/」字符...

回答

0

您可以設置:此路徑解決方案路徑爲

path: config.serverPath + '/messages/{deviceId}' 

並使用request.query獲取查詢參數。

+0

我想這已經和我在與這條路線404錯誤,如果我做以下請求:HTTP://本地主機:8080 /消息/ 658734-2384635-373 /設備類型=電話 –

+0

但是,如果我刪除路徑參數和查詢參數之間的「/」,路由正在工作:localhost:8080/messages/658734-2384635-373?deviceType = phone –

+0

它適用於我。 請記住,您的端點是作爲POST實現的。如果你用GET方法請求端點,它會給你404。 – Shane

0

你可以這樣做。無需編寫cofig.serverPath。另外,你將不得不使用Joi來驗證查詢參數。

path: '/messages/{deviceId}', 
handler: storyController.getAllPaginatedStories, 
config: { 
    validate: { 
     query: { 
      deviceType: Joi.string().required().valid(['phone']), 
     } 
    } 
}