2013-03-09 34 views
4

我嘗試使用Express框架在Node JS中設置路由時出現問題。Node.js - 在路由中表示特殊字符(/campañas)

我的路線是這樣的一個:

app.get('/campaña/nueva', sms.nueva); 

,但我不能得到它的工作,因爲邪惡的「N」(其與「N」壽作品)

我用笨的一段時間,你可以設置你想要啓用或禁用哪些字符 你們知道任何workarround或在節點中啓用它的方法嗎?

+2

你可以URI編碼N轉換%C3%B1 – user1937198 2013-03-09 16:54:42

回答

9

我想你需要同時處理一個URL編碼和UTF-8(也可能是拉丁-1)變體。請檢查以下內容:

  1. 您的客戶(瀏覽器)如何發送URL?

    • URL encoded as %C3%B1
      • Chrome和Firefox發送%C3%B1編碼
      • 我想這是占主導地位的合規行爲
    • 的Unicode?
      • 我使用curl進行了測試,它看起來會發送一個單一字符,我認爲它是從我的終端獲得的任何編碼,可能是UTF-8。
  2. 此基礎上,嘗試調整你的路線。您可以使用正則表達式或明確列表

app.get('/campaña/nueva', sms.nueva) 
app.get('/campa%c3%b1a/nueva', sms.nueva) 
//Or for convenience if you like 
app.get('/' + encodeURIComponent('campaña') + '/nueva', sms.nueva) 

我的猜測是最終大多數瀏覽器將發送URL編碼的版本,所以你也許可以與僅僅是最後一個版本度日。

2

我在路線中遇到$的問題。 URL編碼的字符在我的情況下不起作用,但是逃脫了一個作品。

所以我結束了

app.get('/\\$myRoute', function (req, res) { 

}