2013-03-14 41 views
2

我有一個請求進入我的應用程序看起來像這樣:快遞航線

POST /?post%2F5125504547b49d91b2000001 200 53ms - 9.35kb 

,當未編碼的模樣:

POST /?post/5125504547b49d91b2000001 200 53ms - 9.35kb 

我的問題,就是如何我捕獲這與一條明確的路線?

我已經試過如下:

app.all "/?post/:id", 

app.all "/?post%2F:id", 

任何想法?

回答

1

我會建議使用中間件來操縱URL回到'正常'的東西,以便您可以路由和響應它,就像你在表達。

也許是這樣的僞代碼:

app.use(function (req, res, next) { 
    if (req.originalUrl.match(/^\/(\?post)/)) 
     req.url = req.originalUrl = req.originalUrl.replace('%2F', '/').replace('/?','/'); 
    next(); 
    }); 
+0

的最佳解決方案,感謝這麼多爲你的時間! – wesbos 2013-03-14 19:10:15

2

路由路徑定義是一個正則表達式,所以你需要double escape問號,這是一個特殊字符

app.all "/\\?post%2F:id" 
+0

很高興知道這一點。謝謝 – wesbos 2013-03-14 20:02:06