Nodejs Express 4.X 中文API -- Request

req.params
這是一個包含着被命名的路由規則“參數”的對象屬性。例如如果你有一個路由規則爲:”/user/:name”,然後這個”name”屬性你就可以使用req.params.name來調用,這個屬性默認爲 {}

 //GET /user/tj
 req.params.name
 //=>"tj"

當在定義路由規則的時候使用了正則表達式,匹配結果會被提供在數組裏使用req.params[N],這裏的N指的是第n個匹配數組。這樣的規則被應用在使用未命名的通配匹配規則,例如/file/*;

 //GET /file/javascript/jquery.js
 req.params[0]
 // => "javascripts/jquery.js"

req.query
這個屬性是一個對象屬性包含着被解析過的請求參數對象,默認爲{}

 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"

req.body
這個屬性是包含一個被解析過的請求體。這個功能是中間件 bodyParser 提供的,儘管其他的請求體解析中間件也會很好的支持這樣的約定。這個屬性會在使用了bodyParser()的時候被定義爲{}。

1 //POST user[name]=tobi&user[email][email protected]
2 req.body.user.name
3 //=> "tobi"
4 req.body.user.email
5 // =>"[email protected]"
6 //POST {"name":"tobi"}
7 req.body.name
8 //=>"tobi"

req.param(name)
返回一個參數名爲 name 的值

 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.params
req.body
req.query

直接訪問 req.body , req.params,和 req.query 應該是更加的清晰,除非你確實需要接受每個對象的輸入。

req.route
當前匹配的 “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 }

req.cookies
當cookieParser()中間件被使用的時候,這個對象將會被初始化爲{},除此之外,還包含了由用戶代理髮送過來的cookies

 //Cookie: name=tj
 req.cookies.name
 // =>"tj"

如果有任何問題或者疑問,請查閱cookie-parser的附加文檔

req.signedCookies
當 cookieParser(secret)中間件被執行的時候,這個對象會被初始化爲{},還包含了用戶代理髮送過來的被簽名的cookie,未簽名的和準備使用的。簽名後的cookies被存放在一個單獨的對象內,否則,攻擊者會很輕鬆的替換掉”req.cookie”內的值。需要注意的是,簽名的cookies並不帶表它們是隱藏的或者是加密的,這個只是同於防止篡改cookies。

 //Cookie: user = tobi.CP7AWaXDfAKIRfH49dQzKJx7sKzzSoPq7/AcBBRVwlI3
 req.signedCookies.user
 //=> "tobi"

如果有任何問題或者疑問,請查閱cookie-parser的附加文檔

req.get(field)
獲取請求頭內的 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);

req.accepts(types)
檢查給定的類型 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的附加文檔

req.acceptsCharset(charset)
檢查給定的 charset是否是可以被接受的

如果有任何問題或者疑問,請查閱accepts的附加文檔

req.acceptsLanguage(lang)
檢查給定的 lang 是否爲可接受的

如果有任何問題或者疑問,請查閱accepts的附加文檔

req.is(type)
檢查提交進來的請求是否包含”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 的附加文檔

req.ip
返回遠程地址,或者在反向代理啓用時返回上游ip地址。

  req.ip
  //=> 127.0.0.1

req.ips
當反向代理模式開啓時,解析 “X-Forwarded-For” ip地址列表並返回一個數組,否則返回空數組。例如,如果一個值爲”client,proxy1,proxy2″你將會收到數組[“client”,“proxy1”,“proxy2”]這裏可以看出”proxy2″是最遠的下游地址。

req.path
返回請求的URL路徑名。

 //example com/users?sort=desc
 req.path
 // =>"/users"

req.host
返回從“Host”請求內取出的主機名,但是不包含端口號。

  //Host: "example.com:3000"
  req.host
  //=> "example.com"

req.fresh
檢查請求是否是新的 – 通過對Last-Modified或者 ETag進行匹配,來標明這個資源是不是”新的”。

 req.fresh
 //=>true

req.stale
檢查這個請求是不是舊的 – 如果Last-Modified 或者 ETag 不匹配,標明這個資源是舊的。

 req.stale
 //=>true

req.xhr
檢查請求頭裏是否有”X-Requested-With”這樣的字段並且值爲”XMLHttpRequest”(jQuery 等)請求時會設置這個頭

 req.xhr
 //=> true

req.protocol
返回請求協議字符串 “http”或者”https”當請求爲TLS時。當被啓用反向代理時,”X-Forwarded-Proto” 請求頭將會被信任。如果你運行一個支持https協議的反向代理,那麼這個是會被支持的。

 req.protocol
 //=>"http"

req.secure
檢查TLS連接是否已經被建立。下面是一段簡寫

 'https' == req.protocol

req.subdomains
返回子域名數組

 //Host:"tobi.ferrets.example.com"
 req.subdomains
 // =>['ferrets','tobi']

req.originalUrl
這個屬性很像req.url,然而,他保留了原始請求的url,允許你在做內部路由的時候自由的重寫 req.url。例如,app.use()會重寫 req.url 爲掛載點

 // GET /search?q=something
 req.originalUrl
 //=> '/search?q=something'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章