2017-08-05 84 views
3

我做了一個谷歌搜索,但是我找不到我真正需要的東西。 我需要查詢一個API,它具有相同的路線,但具有不同的參數。在Nodejs中創建具有不同參數的類似路由

實施例:

router.get('/項目/:查詢,函數(){})

在這種情況下,我將搜索所有項目

router.get('/ items /:id,function(){})

在這裏,我會尋找特定項目

回答

0

問題是,如果沒有額外的模式匹配,Express將無法區分/items/:query/items/:id,它們是相同的路由模式,只是參數的別名不同。

根據您打算構建查詢的方式,您可能需要考慮使用路徑/items,然後使用查詢字符串參數或單獨使用端點/items/search/:query

+0

我有同樣想法的背後,但我必須做到這一點 我想這:https://stackoverflow.com/questions/22209934/multiple-routes-with-differents-params-calling-the-same-ressource –

+0

挑戰壞的設計是良好的工程的主成分。 –

1

在你的問題的核心是,你試圖在同一位置指定兩個不同的資源。如果你設計你的API來堅持寧靜的原則,你會明白爲什麼這不是一個明智的選擇。這裏有兩個很好的出發點:

https://en.wikipedia.org/wiki/Representational_state_transfer

http://www.restapitutorial.com/lessons/whatisrest.html

在寧靜的API的根資源代表的項目集合:

/api/items 

...當你指定一個id指示你想只有一個項目:

/api/items/abc123 

如果你真的想要完成你在問題中提出的問題,你需要添加一個url參數,如/ items/query?query = true或/ items/abc123?detail = true,但這會讓99%的網頁開發人員曾經看過你的代碼。

而且我不知道,如果你真正的意思。但是,當你通過一個名爲「查詢」到似乎表明,你要發送一個SQL查詢(或類似的數據定義語言)服務器變量從客戶端到服務器。出於以下幾個原因,這是一個危險的做法 - 最好將所有這類代碼保留在服務器上。

編輯:如果你真的絕對肯定要做這樣說,那麼也許有說集合= true的查詢參數?這至少會被其他開發人員所理解,這些開發人員將來可能不得不維護代碼。另外,還要確保你添加註釋來解釋你爲什麼沒能實現靜止這樣你就不會留下一個不好的名聲:)

+0

你說得對,我會以另一種方式來做,但這就是需要做的事情:( –

+0

然後你需要使用查詢參數來描述這兩種請求之間的區別。也可以使用http頭文件。無論如何,如果沒有在節點中讀取標誌,就沒有辦法完成你要求的內容。 – Graham

相關問題