2016-10-04 31 views
1

我有一個路由定義是這樣的追趕code PARAM:ExpressJS路線的正則表達式:如何匹配一個參數去一切,除了一個路由

app.get('/:code([a-zA-Z]{3})', codeHandler); 

這其中有三個字母長的所有代碼匹配,並且它是工作正常。但我想更改它以匹配除一個之外的所有代碼。例如,可以說我想排除「cct」。我嘗試使用排除模式,從路線excude「CCT」由 修改上述匹配,像這樣:

app.get('/:code((?!cct)[a-zA-Z]{3})', codeHandler); 

但現在這條路犯規匹配任何內容。即使以前被捕獲的有效代碼現在也不匹配。我不知道我做錯了什麼。

回答

1

我認爲這樣做會留下你的正則表達式,因爲它是最簡單的方式,但codeHandler函數內部沿着線的東西:

if(req.url == '/cct') return next(); 

然後表示將在移動到下一個路線處理程序。如果你已經爲'/ cct'定義了一個,那麼它會轉到那個 - 否則它會導致404錯誤,因爲找不到頁面。

0

試試這個:

app.get(/^\/((?!cct)[a-zA-Z]{3})$/, (req,res) => { 

    console.log(req.params[0]); 

}) 
+0

一個好處,我從原來的路線是它觸發了我的'app.param'處理器,其處理PARAM'得到:code',從DB擡頭數據和分配,要'req'目的。有沒有辦法仍然觸發註冊'參數'處理程序。 – codneto

相關問題