2017-08-07 144 views
2

我無法讓我的.get()工作。我對.use()和.get()的理解是.use()用於我們想要應用的路徑,而.get()更具體(選擇特定的URL來應用)。使用Express指定特定路徑

In我的例子中,我想顯示'適用於所有頁面'的任何頁碼,但是如果我輸入'/ 28',我想讓.get消息顯示出來。現在,即使我去/ 28時,我也會收到.use消息。

router.use('/:id', function(req, res){ 
    console.log("Things " + Date.now()); 
    res.send('Applies to all pages ' + req.params.id); 

}); 


router.get('/28', function(req, res){ 
    res.send('Secret 28 page'); 
}); 
+0

使用是爲整個應用程序,並得到是一個特定的API,這意味着獲取路徑將被追加到使用路徑。例如,您的代碼將匹配路徑'/ {some_id/28}'到您的get方法。如果你想以28的「適用於所有頁面」作爲唯一的例外來響應任何事情,只需在你的if語句中獲得('/:id',()=> {如果28做了某事, )並擺脫使用,默認情況下使用將是'/'。 – Jason

回答

1

use方法用於從您的快遞app或快遞router使用所有http動詞到某個path的動詞。在使用use時,您必須考慮優先順序。在這裏,發生的事情是,您已經在您的動態路由器中使用了use作爲router.use('/:id', ...),這也需要get請求。

您可以先使用get路由器,這樣它只需要get請求/28並將所有未處理的請求轉移到其他路徑。

router.get('/28', function(req, res){ 
    res.send('Secret 28 page'); 
}); 

router.use('/:id', function(req, res){ 
    console.log("Things " + Date.now()); 
    res.send('Applies to all pages ' + req.params.id); 

}); 
1

docs

您在其中定義與router.use中間件(順序)是非常重要的。它們是按順序調用的,因此順序定義了中間件的優先級。

在你的例子中,你的'/:id'將優先匹配時。

因此交換訂單來修復您的示例,並且通常首先定義更具體的處理程序。

1

.use()適用於無論HTTP動詞所有的路徑,所以你的情況下,它適用於GET,POST,PUT和所有以/:id路徑和app.get("/28")啓動其他請求是這樣的要求