Express4.x常用API(一):res


最近在學習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

res.append(field[,value])

對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()來傳輸文件

res.end([data][,encoding])

結束應答的處理,這個方法來自於Node core

鏈接在此

這個方法標志着服務器應答的所有頭部和數據都已經發送完畢.在express中通常用於快速的結束無數據的應答,如果需要返回數據,用res.send()和res.json().

res.format(object)

調用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.get(field)

  返回相應頭部信息,注意的是在處理周期中,不使用res.append()和res.set()設置頭部信息,頭部信息為undefined.

res.json([body])

  發送一個JSON應答,這個方法和res.send()使用對象或數組作為參數完全相同(但是測試后發現在處理null上,兩個函數是有差別的,send()會返回空白字符串,而json()會返回null字符串).你也可以用null和undefined作為參數傳入(盡管它們在嚴格意義上不是有效的JSON數據)

res.jsonp([body])

  和res.json的方法是基本一樣的,但是添加了對jsonp的支持.對於回調函數的名稱可以用app.set('jsonp callback name','callbackName')來設置

res.links(links)

  設置Link應答頭部.

res.location(path)

  設置HTTP應答location頭部,返回狀態碼302時(表示文檔轉移時)自動跳轉到location所表示鏈接上.設置為"back"則跳轉到前一個頁面

res.redirect([status,]path)

  重定向到其他網頁,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函數中進行渲染后模板的拼接或修改.

res.send([body])

  發送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對象屬性設置如下表:

    在傳輸完成或者錯誤發生后,將會調用fn(err)

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"  

 

 

 

 

 

 

res.sendStatus(statusCode)

發送HTTP應答狀態碼,在狀態碼有效情況下res.sendStatus(200) 等同於res.status(200).send("OK")

如果輸入的狀態碼無效,HTTP statu依舊會被設定為參數值,並且返回字符串變為傳入參數值.

res.set(field[,value])

一次性設定完應答頭部信息,如果之前有設置頭部信息,則會被覆蓋.傳入的一個參數為對象/兩個參數為相對應的頭部和值.

res.status(code)

使用該方法設定HTTP 應答的status.相關:Response.statusCode()

res.type(type)

使用該方法設定HTTP 應答的Content-Type,如果傳入參數為"/",則Content-Type會被設置為type.該方法用於判斷type的函數來自於mime.lookup()

res.vary(field)

在沒有Vary應答頭部時增加Vary應答頭部.

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM