Express4.x常用API(二):Request


這是第二篇了,打算每天都拿些時間去詳細的看看文檔來自學下express吧,接下來就開始了,這次依然是有選擇性的找API根據自己的理解翻譯過來,方便日后開發時候的自己查閱,由於水平有限,大概也會在使用過程中更新下各個API的坑,事不宜遲,開始吧


 

從目錄看我們很明顯可以看出Request的屬性是明顯多於Response的,接下來我們逐項看看吧.

Request,首先它的屬性是來自HTTP請求查詢字符串,參數,實體,頭部等等.按照慣例來說,Request通常被簡稱req,但是和Response一樣,實際名字還是我們說了算的,在回調函數中你想怎么樣就怎么樣.

app.get('/user/:id', function(req, res){//req,隨你怎么改對吧
res.send('user ' + req.params.id);
});
//改變之后
app.get('/user/:id',function(whatEver,res){//都一樣,記住調用時候你傳入參數是怎樣就好
res.send('user ' + whatEver.params.id);
});

其實兩個函數都是一樣的.

接下來我們好好看看屬性

Properties

   req.app:res和req都有這個屬性,功能上都是一樣的,都是用於保存到底是哪個express實例在使用這個中間件.

   req.baseUrl:返回路由實例掛載的的URL path,其實就是你app.use('',route);時第一個參數的值,如果是匹配多項的正則或數組,則會返回匹配成功時的path.

官網注釋:req.baseUrl和app.mountpath相同,但是app.mountpath返回的是匹配字符串參數.舉個栗子比較好吧

app.use('/gre+t',route); //<-訪問/greet時,baseUrl()返回的將會是/greet,而mountpaht將會返回/gre+t

  req.body:包含一對在請求主體中的鍵值對數據,默認為undefined.這常常用在你使用body-parsing中間件的時候,比如body-parser(用於解析客戶端請求body的內容)和multer(處理http提交multipart/form-data,可以用於上傳文件).

    req.cookies:當使用cookie-parser中間件時,這屬性是一個對象,如果請求沒包含任何cookie則默認為{}

  req.fresh與req.stale:兩個是相對的屬性.用於判斷請求是不是新的,通過Last-Modified或者ETag進行匹配,表明資源是不是新的.如果是新的則fresh為true.

  req.hostname:包含HTTP頭部的Host屬性

  req.ip:返回遠程地址,如果信任代理開啟了的話,返回上一級的IP地址.

  req.ips:當信任代理設置為true,這個屬性包含一個由請求頭部中"X-Forwarded-For"里的IP組成的數組.有些情況下為空數組.(信任代理trust poxy通過app.set()設置)

  req.originalUrl:這個屬性很像req.url,但是這個屬性維持req.url的初始值,你則能自由的修改req.url.

  req.params:是一個數組對象,命名的參數會以鍵值對的形式存放,1:如路由中/user/:name;則req.params.name就會存放path中name對應的字串.2:如使用正則表達式定義路由,req.params則是正則中匹配的字串,如/user/ff*/fff*路由,path為/user/ffd/fffccc時,req.params = {"0":"d","1":"ccc"};

  req.path:包含請求URL的path部分.

  req.protocol:就是請求的協議啦,如HTTP或者HTTPS

  req.query:一個對象用來保存路由中附帶的參數,如/shoes?order=desc&shoe[color]=blue;則req.query.order=desc,req.query.shoe.color=blue;

  req.route:返回匹配路由信息.

  req.signedCookies:當使用了cookie-parser中間件后,這個屬性將被默認創建為{}並等待使用,否則包含了用戶代理傳回來的簽名后的cookie並等待使用.因為req.cookie是容易被惡意攻擊者替換,需要注意的是,這種簽名的cookie不是代表它是隱藏或者加密的,而只是簡單的阻止了篡改cookie,相當於一種預防篡改的手段.

  req.subdomains:看sub-domain,這些單詞也是可以簡單看出是獲取請求子域名的屬性,如Host:tobi.fff.example.com=>req.subdomains=>["fff","tobi"];

  req.xhr:判斷請求的"X-Requested-With"是否為"XMLHttpRequest",是則返回true.

Methods

  req.accepts(types)

    該方法用於檢查請求的指定內容類型,基於HTTP請求的頭部,返回最匹配的類型.如果沒有可接受的指定內容類型,將會返回undefined(這種情況下,應該返回406狀態碼"Not Acceptable");
    type值應該是簡單MIME類型字串(如"application/json"),文件擴展名如json,也可以傳入一個數組,則方法返回最匹配的一個.

// Accept: text/html
req.accepts('html');
// => "html"

// Accept: text/*, application/json
req.accepts('html');
// => "html"
req.accepts('text/html');
// => "text/html"
req.accepts('json, text');
// => "json"
req.accepts('application/json');
// => "application/json"

// Accept: text/*, application/json
req.accepts('image/png');
req.accepts(
'png');
// => undefined

// Accept: text/*;q=.5, application/json
req.accepts(['html', 'json']);
req.accepts(
'html, json');
// => "json"
View Code

  req.acceptsCharsets(charset[,...])

    檢查傳入字符集中有無字符集可用,基於請求頭部Accep-Charset字段,如果沒有可用字符集,返回 false,可用則返回可用字符集.

  req.acceptsEncoding(encoding[,...])

    檢查傳入的編碼方式中是否有有效的,基於請求頭部Accept-Encoding字段,如果沒有則返回false,可用則返回可用的編碼方式.

  req.acceptsLanguages(lang[,...])

    恩,和上面兩個都是同一個意思.基於Accept-Language字段.

  req.get(field)

    可以說我們最簡單的獲取信息的方法了!返回HTTP請求頭部字段中相應的字段值,值得注意的是,它是大小寫不敏感的.Referrer和Referer是可以互換的

  req.is(type)

    如果請求頭部中Content-Type字段值和傳入type相同則返回true.否則返回false.

  req.param(name[,defaultValue])

    返回出現的參數名為name的值.查找將按照下列順序進行

      • req.params
      • req.body
      • req.query

以上~就是Request對象的大部分屬性和方法了.


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com