2015-12-16 119 views
-2

我正在重新說明這一點,因爲我已經找出問題所在,但我無法理解它是如何發生或如何解決它的。NodeJs Express路由器錯誤

基本上,在我所有的路線中,我必須在那裏添加DELETE路線。首先是如下

app.route('/bi/clubs/:id') 
    .post(authentication,clubController.getAll) 
    .delete(authentication,clubController.deleteClub); 

第二個位置是

app.route('/bi/clubs/members') 
    .post(authentication,memController.getAll) 
    .delete(authentication,memController.deleteMember); 

每當我打電話刪除了「/ BI /俱樂部/成員」,表達的是實際的路由到/ BI /俱樂部/ :ID'。我實際上已經經歷了,並且發現這種情況正在發生。

我可以驗證我沒有在應用程序的任何其他位置添加路線,如果我註釋掉'/ bi/clubs/id'上的DELETE路線,那麼第二條DELETE路線將正確路由。如果我不發表評論,則對DELETE'/ bi/clubs/members'的呼叫將路由到'/ bi/clubs /:id'。

我設置路線的順序就像上面一樣。

任何幫助將不勝感激。

+0

那麼服務器拋出的實際錯誤是什麼?你沒有提供很多細節...... – robertklep

+0

這就是問題所在。我甚至沒有收到我的日誌文件或任何錯誤。我正在測試郵差,只是得到內部服務器錯誤。有趣的是,如果我將刪除方法的路由更改爲其他任何內容,那麼它將起作用。 –

+0

您確實需要提供更多信息(什麼是'authentication'?getAll'工作嗎?您是否在[調試模式](http://expressjs.com/en/guide/debugging.html)中運行了Express?)。 – robertklep

回答

1

快遞與您的路由/bi/clubs/members/bi/clubs/:id。當向Express應用程序發出請求時,您的應用程序將從您的路線和中間件的頂部開始,一直到達匹配的所有路線。

當你告訴快遞相匹配的路線/bi/clubs/:id,所有你告訴它匹配bi,然後clubs然後,你指的是作爲id的動態值。儘管您可能在尋找id作爲數字或MongoDB ID,但Express並不知道其差異,因此在技術上,字符串members與動態值相匹配。只是不是你想要的。

如果你console.log的值爲id它應該是members。你的靜態路由需要在動態路由之前註冊。

如果您有任何問題或需要示例,請告訴我。

+0

Max,非常感謝。但我仍然不確定如何在不改變路徑的情況下解決此問題。你能舉個例子嗎?或者讓我知道你是否需要我的代碼的更多信息。我正在使用MEANJS結構,並且它不知道按順序添加我的所有路由,並且我將這兩條路由放在不同的文件中。 –

+0

@John你怎麼打這些路線文件?我假設用''require()'''。你只需確保你在哪裏調用或加載你的文件,那麼帶''/ bi/clubs/members'''的文件就會首先出現。如果這沒有意義,請讓我知道,我會提供一個明確的例子。 –

+0

你可以使用正則表達式來測試@Johns理論。 – AfDev