這是第二篇了,打算每天都拿些時間去詳細的看看文檔來自學下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.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.protocol:就是請求的協議啦,如HTTP或者HTTPS
req.query:一個對象用來保存路由中附帶的參數,如/shoes?order=desc&shoe[color]=blue;則req.query.order=desc,req.query.shoe.color=blue;
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
該方法用於檢查請求的指定內容類型,基於HTTP請求的頭部,返回最匹配的類型.如果沒有可接受的指定內容類型,將會返回undefined(這種情況下,應該返回406狀態碼"Not Acceptable");
type值應該是簡單MIME類型字串(如"application/json"),文件擴展名如json,也可以傳入一個數組,則方法返回最匹配的一個.
// Accept: text/htmlView Code
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"
req.acceptsCharsets(charset[,...])
檢查傳入字符集中有無字符集可用,基於請求頭部Accep-Charset字段,如果沒有可用字符集,返回 false,可用則返回可用字符集.
req.acceptsEncoding(encoding[,...])
檢查傳入的編碼方式中是否有有效的,基於請求頭部Accept-Encoding字段,如果沒有則返回false,可用則返回可用的編碼方式.
req.acceptsLanguages(lang[,...])
恩,和上面兩個都是同一個意思.基於Accept-Language字段.
可以說我們最簡單的獲取信息的方法了!返回HTTP請求頭部字段中相應的字段值,值得注意的是,它是大小寫不敏感的.Referrer和Referer是可以互換的
如果請求頭部中Content-Type字段值和傳入type相同則返回true.否則返回false.
req.param(name[,defaultValue])
返回出現的參數名為name的值.查找將按照下列順序進行
以上~就是Request對象的大部分屬性和方法了.
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。