Express4.x常用API(一):res

来源:http://www.cnblogs.com/thewindsword/archive/2016/03/21/5296641.html
-Advertisement-
Play Games

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

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

PropertyDescriptionDefaultAvailability
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)

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應答頭部.

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在實際開發項目中,會遇到很多定時任務的工作。比如:定時導出某些數據、定時發送消息或郵件給用戶、定時備份什麼類型的文件等等 一般可以寫個定時器,來完成相應的需求,在node.js中自已實現也非常容易,接下來要介紹的是node-schedule來完成定時任務 下麵就用示例來說明一下node-schedu
  • 運算 sass可進行簡單的加減乘除運算等 所謂選擇器嵌套指的是在一個選擇器中嵌套另一個選擇器來實現繼承,從而增強了sass文件的結構性和可讀性。 如上代碼,定義了兩個占位選擇器%ir和%clearfix,其中%clearfix這個沒有調用,所以解析出來的css樣式也就沒有clearfix部分。占位選
  • 屬性列表 說明 webkit webkit相關瀏覽器則返回true,否則返回false,如google,傲游。 mozilla mozilla相關瀏覽器則返回true,否則返回false,如火狐 safari safari相關瀏覽器則返回true,否則返回false,如safari opera op
  • 首先,React.js是facebook在2013年5月開源的一個前端框架,React不是一個MVC框架,它是構建易於可重覆調用的web組件,側重於UI, 也就是view層, React為了更高超的性能而使用虛擬DOM作為其不同的實現。 它同時也可以由服務端Node.js渲染 - 而不需要過重的瀏覽
  • 最近做重構,有一個功能是,滑鼠點擊鏈接後顯示不同樣式: 代碼如下,樣式佈局我修改後如下,使用bootstrap框架來做。 現在重點說一下:功能實現。 原來代碼是這樣實現鏈接點擊樣式的,給每個鏈接不同的class, 然後在page1.html頁面定義: 同理在page2.html頁面定義: 在page
  • Firebug功能異常強大,不僅可以調試DOM,CSS,還可以調試JS代碼,下麵介紹一下調試JS。 console對象是Firebug內置的對象,該對象可以在代碼中寫入,可以在控制面板中寫入。 1)有五個方法來顯示信息。依次為: 1、console.log(),可以用來取代alert()或docum
  • 之前計劃是一周還原一個網頁或者切一張psd來練習基本功的。正好周五的時候接到一個電話面試,讓我還原一下163郵箱主頁,晚上發給他,就正好當是這周的練習吧。 吃完晚飯開工,做到12點,差不多4個小時,基本上做完了,不過還有些局部沒完成。算還原度90%吧,剩下的這兩天有空再補啦。 這是目前的完成情況 w
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...