2013-08-05 8 views
5

私はexpressjsアプリを書いています。 req.params.anythingは常に文字列であり、数値ではない user_idの数値を渡すと、typeofは常に文字列です。req.params.numberはexpressjsの文字列ですか?

app.get('user/:user_id', function(req, res){ 
    console.log(typeof req.params.user_id); 
}); 

GETユーザー/ 21

これは文字列をログに記録します。

req.params.xでは常に文字列を入力していますか?

+1

独自のパラメータを定義することができます。その場合は、任意のタイプを指定できます。 [Documentation](http://expressjs.com/api.html#app.param) – mak

+0

Expressは単にURL文字列を 'RegExp'で解析します。だから、あなたがそれを自分で変換するかもしれない数字にする必要があるなら、 'req.params.x = parseInt(req.params.x)'。 –

+2

ヒント: 'Number(req.params.x)'は 'parseInt(req.params.x) 'より速い – randunel

答えて

4

はい、すべてのパラメータは文字列です。

これはexpressjs route.jsから抽出される:decodeURIComponentの結果は常に文字列であるためmはにregexp.exec(の結果であるつつvalは常に、文字列になり

var val = 'string' == typeof m[i] 
    ? decodeURIComponent(m[i]) 
    : m[i]; 

)これは一致した文字列の配列を返します。したがって、m[i]が文字列であると仮定することも安全です。

+0

これは良い答えではありません。それらが常に文字列であることをどのように知っているかについての詳細情報を提供する必要がありますこれについてあなたのソースを共有してもよろしいですか? – mak

+0

あなたの前のコメントへの答え:経験から。ニースのあなたの平均のコメントを編集する。 – randunel

+0

説明が間違っています。 'decodeURIComponent'は' m [i] 'が文字列の場合にのみ呼び出され(文字列を返します) 'm [i]'が文字列でない場合、 'decodeURIComponent'は呼び出されず、' val'は文字列ではありません。 – mak

関連する問題