相關閱讀:javascript
Express 4.X API 翻譯[一] -- Application篇html
Express 4.X Api 翻譯[二] -- Request篇java
這是一個包含着被命名的路由規則「參數」的對象屬性。例如若是你有一個路由規則爲:」/user/:name」,而後這個」name」屬性你就可使用req.params.name來調用,這個屬性默認爲 {}express
1 //GET /user/tj 2 req.params.name 3 //=>"tj"
當在定義路由規則的時候使用了正則表達式,匹配結果會被提供在數組裏使用req.params[N],這裏的N指的是第n個匹配數組。這樣的規則被應用在使用未命名的通配匹配規則,例如/file/*
;json
1 //GET /file/javascript/jquery.js 2 req.params[0] 3 // => "javascripts/jquery.js"
這個屬性是一個對象屬性包含着被解析過的請求參數對象,默認爲{}api
1 //GET /search?q=tobi+ferret 2 req.query.q 3 //=>"tobi ferret" 4 5 //GET /shoes?order=desc&shoe[color]=blue&shoe[type]=converse 6 req.query.order 7 // =>"desc" 8 req.query.shoe.color 9 //=>"blue" 10 req.query.shoe.type 11 //=>"converse"
這個屬性是包含一個被解析過的請求體。這個功能是中間件 bodyParser 提供的,儘管其餘的請求體解析中間件也會很好的支持這樣的約定。這個屬性會在使用了bodyParser()的時候被定義爲{}。數組
1 //POST user[name]=tobi&user[email]=tobi@learnboost.com 2 req.body.user.name 3 //=> "tobi" 4 req.body.user.email 5 // =>"tobi@learnboost.com" 6 //POST {"name":"tobi"} 7 req.body.name 8 //=>"tobi"
返回一個參數名爲 name 的值cookie
1 //?name=tobi 2 req.param('name'); 3 //=>"tobi" 4 5 //POST name=tobi 6 req.param('name') 7 //=>"tobi" 8 9 // /user/tobi 對應的路由規則爲 /user/:name 10 req.param('name') 11 //=> "tobi"
查找的優先級以下:
直接訪問 req.body , req.params,和 req.query 應該是更加的清晰,除非你確實須要接受每一個對象的輸入。
當前匹配的 「Route」 包含一些屬性,例如路由的原始字符串以及轉換後的正則表達式等。
1 app.get('/user/:id?',function(req,res){ 2 console.log(req.route); 3 });
上面的例子將會輸出如下內容:
1 { 2 path: '/user/:id?', 3 keys: [ {name:'id',optional:true} ], 4 regexp: /^\/user(?:\/([^\/]+?))?\/?$/i, 5 params:[id: '12'] 6 }
當cookieParser()中間件被使用的時候,這個對象將會被初始化爲{},除此以外,還包含了由用戶代理髮送過來的cookies
1 //Cookie: name=tj 2 req.cookies.name 3 // =>"tj"
若是有任何問題或者疑問,請查閱cookie-parser的附加文檔
當 cookieParser(secret)中間件被執行的時候,這個對象會被初始化爲{},還包含了用戶代理髮送過來的被簽名的cookie,未簽名的和準備使用的。簽名後的cookies被存放在一個單獨的對象內,不然,攻擊者會很輕鬆的替換掉」req.cookie」內的值。須要注意的是,簽名的cookies並不帶表它們是隱藏的或者是加密的,這個只是同於防止篡改cookies。
1 //Cookie: user = tobi.CP7AWaXDfAKIRfH49dQzKJx7sKzzSoPq7/AcBBRVwlI3 2 req.signedCookies.user 3 //=> "tobi"
若是有任何問題或者疑問,請查閱cookie-parser的附加文檔
獲取請求頭內的 field 字段,不區分大小寫,其中Referrer 和 Referer字段是可互換的。
1 req.get('Content-Type'); 2 //=>"text/plain" 3 req.get('content-type'); 4 // =>'text/plain' 5 req.get('Something'); 6 //=> undefined
別名爲 req.header(field);
檢查給定的類型 types 是否是能夠接受的類型,當是可接受的類型時返回最佳的匹配,不然返回 undefined – 在這種狀況下,你應該返回406″Not Acceptable」。
type 的值能夠是單一的一個mine類型的字符串,好比」application/json」,擴展名爲」json」,也能夠是一個以逗號分隔的列表或者數組。當爲列表或數組時將返回最佳匹配。
1 //Accept: text/html 2 req.accepts('html'); 3 //=>"html" 4 // Accept: text/*, application/json 5 req.accepts('html'); 6 // => "html" 7 req.accepts('text/html'); 8 // => "text/html" 9 req.accepts('json, text'); 10 // => "json" 11 req.accepts('application/json'); 12 // => "application/json" 13 // Accept: text/*, application/json 14 req.accepts('image/png'); 15 req.accepts('png'); 16 // => undefined 17 // Accept: text/*;q=.5, application/json 18 req.accepts(['html', 'json']); 19 req.accepts('html, json'); 20 // => "json"
若是有任何問題或者疑問,請查閱accepts的附加文檔
檢查給定的 charset是不是能夠被接受的
若是有任何問題或者疑問,請查閱accepts的附加文檔
檢查給定的 lang 是否爲可接受的
若是有任何問題或者疑問,請查閱accepts的附加文檔
檢查提交進來的請求是否包含」Content-Type」頭字段和他匹配的給定的mime type
1 // With Content-Type: text/html; charset=utf-8 2 req.is('html'); 3 req.is('text/html'); 4 req.is('text/*'); 5 // => true 6 // When Content-Type is application/json 7 req.is('json'); 8 req.is('application/json'); 9 req.is('application/*'); 10 // => true 11 req.is('html'); 12 // => false
若是有任何問題或者疑問,請查閱 type-is 的附加文檔
返回遠程地址,或者在反向代理啓用時返回上游ip地址。
1 req.ip 2 //=> 127.0.0.1
當反向代理模式開啓時,解析 「X-Forwarded-For」 ip地址列表並返回一個數組,不然返回空數組。例如,若是一個值爲」client,proxy1,proxy2″你將會收到數組["client","proxy1","proxy2"]這裏能夠看出」proxy2″是最遠的下游地址。
返回請求的URL路徑名。
1 //example com/users?sort=desc 2 req.path 3 // =>"/users"
返回從「Host」請求內取出的主機名,可是不包含端口號。
1 //Host: "example.com:3000" 2 req.host 3 //=> "example.com"
檢查請求是不是新的 – 經過對Last-Modified或者 ETag進行匹配,來標明這個資源是否是」新的」。
1 req.fresh 2 //=>true
檢查這個請求是否是舊的 – 若是Last-Modified 或者 ETag 不匹配,標明這個資源是舊的。
1 req.stale 2 //=>true
檢查請求頭裏是否有」X-Requested-With」這樣的字段而且值爲」XMLHttpRequest」(jQuery 等)請求時會設置這個頭
1 req.xhr 2 //=> true
返回請求協議字符串 「http」或者」https」當請求爲TLS時。當被啓用反向代理時,」X-Forwarded-Proto」 請求頭將會被信任。若是你運行一個支持https協議的反向代理,那麼這個是會被支持的。
1 req.protocol 2 //=>"http"
檢查TLS鏈接是否已經被創建。下面是一段簡寫
1 'https' == req.protocol
返回子域名數組
1 //Host:"tobi.ferrets.example.com" 2 req.subdomains 3 // =>['ferrets','tobi']
這個屬性很像req.url,然而,他保留了原始請求的url,容許你在作內部路由的時候自由的重寫 req.url。例如,app.use()會重寫 req.url 爲掛載點
1 // GET /search?q=something 2 req.originalUrl 3 //=> '/search?q=something'