最近在學習NodeJS,用到了express,看著官網上的API手冊,打算把其中比較常用到的API根據自己理解翻譯一下,方便自己學習使用. 該篇打算用來記錄下express中res. 由於水平有限,希望能得到大家的修改,在學習過程中我會持續更新修改 Response res對象表示的是Express
最近在學習NodeJS,用到了express,看著官網上的API手冊,打算把其中比較常用到的API根據自己理解翻譯一下,方便自己學習使用.
該篇打算用來記錄下express中res.
由於水平有限,希望能得到大家的修改,在學習過程中我會持續更新修改
Response
res對象表示的是Express收到了HTTP請求時的應答.
雖然經常寫作res,但是其實你可以自己自由的在回調函數中去定義它
1 app.get('/',function(req,res){//第二個參數res就是Response 2 res.send("!"); 3 })
Properties
res.app:只是用於保存哪個express應用實例在使用中間件.res.app和req.app是應答中是一樣的.
res.headersSent:是一個boolean值,在你的res對象發送後會變為true,如res.send();之後.
res.locals:一個JavaScript對象,它可以用於獲取並保存req中的信息,並且生命周期在整個應答周期中.
Methods
對HTTP應答頭部追加特別的值,值能為字元串或數組.在之後使用res.set()會重置之前所有的值.
res.cookie(name,value[,options])
就是設置cookie的函數啦~這個name和value就不必多說了,但是值得註意的是value應該是字元串或者能轉換為JSON的對象.options參數是一個對象並含有下列屬性.
Property | Type | Description |
---|---|---|
domain | String | cookie的功能變數名稱,預設為app的名稱 |
expires | Date | cookie的有效期,沒有指定或設為0,創建的有效期為此次會話 |
httpOnly | Boolean | 標誌cookie只能被web伺服器使用 |
maxAge | String | 方便的通過毫秒設置cookie的有效期 |
path | String | cookie的path,預設是"/". |
secure | Boolean | 表示這個cookie只能用於HTTPS |
signed | Boolean | 指出該cookie是否被標記 |
res.clearCookie(name[,options])
顧名思義,清楚cookie的函數,options可以參考上表
res.download(path[,filename][,fn])
和res.attachment()後res.send()/res.end()一樣,用於提供文件的下載服務,第一個參數為文件在伺服器的位置,第二個參數則是提供給用戶的預設的下載名稱,第三個參數為回調函數,可以用於處理下載錯誤或統計下載數.res.download()使用了res.sendFile()來傳輸文件
結束應答的處理,這個方法來自於Node core
這個方法標志著伺服器應答的所有頭部和數據都已經發送完畢.在express中通常用於快速的結束無數據的應答,如果需要返回數據,用res.send()和res.json().
調用req.accepts()來獲取請求的類型,並根據請求類型執行不同的函數,對於這個,還是放代碼比較好吧.以下為官方API的代碼,在無匹配的情況下預設執行default函數.
1 res.format({ 2 'text/plain': function(){ 3 res.send('hey'); 4 }, 5 6 'text/html': function(){ 7 res.send('<p>hey</p>'); 8 }, 9 10 'application/json': function(){ 11 res.send({ message: 'hey' }); 12 }, 13 14 'default': function() { 15 // log the request and respond with 406 16 res.status(406).send('Not Acceptable'); 17 } 18 });
返回相應頭部信息,註意的是在處理周期中,不使用res.append()和res.set()設置頭部信息,頭部信息為undefined.
發送一個JSON應答,這個方法和res.send()使用對象或數組作為參數完全相同(但是測試後發現在處理null上,兩個函數是有差別的,send()會返回空白字元串,而json()會返回null字元串).你也可以用null和undefined作為參數傳入(儘管它們在嚴格意義上不是有效的JSON數據)
和res.json的方法是基本一樣的,但是添加了對jsonp的支持.對於回調函數的名稱可以用app.set('jsonp callback name','callbackName')來設置
設置Link應答頭部.
設置HTTP應答location頭部,返回狀態碼302時(表示文檔轉移時)自動跳轉到location所表示鏈接上.設置為"back"則跳轉到前一個頁面
重定向到其他網頁,status預設為302.感覺和res.location()+res.status(302).end()差不多,不過path支持back字元串來回退到referer,".."來回退上一個目錄
res.render(view[,locals][,callback])
-
- 如果有callback函數:渲染後的HTML string作為參數傳入,不會直接發送到接收方.next(err)不被執行,會將err當作參數傳入,不會有預設響應.
- 如果沒有callback函數:渲染後的HTML string會直接返回給請求方.發生錯誤會執行next(err)
可以在callback函數中進行渲染後模板的拼接或修改.
發送HTTP應答,body參數有以下幾個選項,如果之前沒有定義Content-Type,根據參數不同有不同的Content-Type
-
- 對象->JSON
- 數組->JSON
- 字元串->test/html
- Buffer對象->application/octet-stream
- 數字->根據數字對應狀態碼的不同返回字元,200->OK,404->Not Found
該方法主要特點在於在non-streaming應答時能自動的完成對header的添加.如HTTP緩存和Content-Length
res.sendFile(path,[,options][,fn])
傳輸path指出的文件,並根據文件拓展名生成Content-Type.除非root在options中已經被設置了,不然path應該是文件的絕對路徑.
options對象屬性設置如下表:
Property | Description | Default | Availability |
---|---|---|---|
maxAge | 設置Cache-Control的max-age屬性,值為毫秒或ms format | 0 | |
root | 設置根目錄 | ||
lastModified | 設置Last-Modified頭部為系統上文件的最後修改日期,設置為false可以禁用它 | Enabled | 4.9.0+ |
headers | 設置HTTP頭部,類型為對象 | ||
dotfiles | 設置是否提供隱藏文件,可設置為"allow","deny","ignore" | "ignore" |
在傳輸完成或者錯誤發生後,將會調用fn(err)
發送HTTP應答狀態碼,在狀態碼有效情況下res.sendStatus(200) 等同於res.status(200).send("OK")
如果輸入的狀態碼無效,HTTP statu依舊會被設定為參數值,並且返回字元串變為傳入參數值.
一次性設定完應答頭部信息,如果之前有設置頭部信息,則會被覆蓋.傳入的一個參數為對象/兩個參數為相對應的頭部和值.
使用該方法設定HTTP 應答的status.相關:Response.statusCode()
使用該方法設定HTTP 應答的Content-Type,如果傳入參數為"/",則Content-Type會被設置為type.該方法用於判斷type的函數來自於mime.lookup()
在沒有Vary應答頭部時增加Vary應答頭部.