2013-08-20 121 views
0

我有以下途徑配置Express.JS URL參數不被解析

app.put('/v1/users/:uid', function(req, res){ 
      res.send(req.route); 
     }); 

當發送PUT請求http://localhost:3000/v1/users/blablabla

我得到以下輸出回

{ 
    "path": "/v1/users/:uid", 
    "method": "put", 
    "callbacks": [ 
     null 
    ], 
    "keys": [ 
     { 
      "name": "uid", 
      "optional": false 
     } 
    ], 
    "regexp": {}, 
    "params": [] 
} 

由於你看到params數組似乎是空的,而不是具有值「blablabla」。但是「uid」鍵出現在鍵中,我不知道該怎麼做。

希望有任何建議。

回答

1

好的,訣竅是Express使用a sparse array to parse the params

當您將它傳遞給req.send時,該陣列將轉換爲JSON.stringify。下面是一個JS外殼會發生什麼:

> var params = []; 
> params['uid'] = 1; 
> params; 
[ uid: 1 ] 
> JSON.stringify(params); 
'[]' 

發生了什麼事是,添加一個非數字到一個數組不改變其長度:

> params.length 
0 

因此,新的值由JSON.stringify忽略。

+0

Laurent,那是不正確的。 req.route打印表示請求路線的整個對象。只是爲了清除它,req.params也由於某種原因返回空。但req.route.params鍵應該包含文檔中的數據:http://expressjs.com/api.html#req.route –

+0

你說得對,我想我知道發生了什麼。我會更新我的答案。 –

+0

已經回答了什麼使其工作,但我不知道爲什麼這種行爲是如此奇怪。 –

0

那麼這是我見過的最奇怪的事情。

當做一個console.log(req.params)console.log(req.route.params)我得到一個空的數組響應([])。

但是在做console.log(req.params.uid)時,我得到了值!這非常奇怪,但嘿,它的作品:)

乾杯。