物件HttpRequest
HttpRequest 是用來處理HTTP 請求的類, 它允許你建立HTTP 請求並與伺服器互動。你可以使用它來向Web 伺服器發送GET、POST 以及其它類型的HTTP 請求
假設我們有一個key 為name 的查詢參數,我們來根據這個參數返回不同的處理結果:如果參數為空,返回"Hello world!";如果參數為"fibjs",返回"Hello fibjs!";否則返回"Hello some body!".
程式碼實現如下:
1
2
3
4
5
6
7
8
9
10const http = require('http');
var svr = new http.Server(8080, (req) => {
var name = req.query.get('name');
var msg = name ? `Hello ${name}!` : 'Hello world!';
req.response.write(msg);
});
svr.start();
這裡我們使用了req.query
這個Collection 類型,它代表HTTP 請求URL 中的查詢參數。
我們向服務程式透過瀏覽器存取http://127.0.0.1:8080/?name=fibjs得到的服務端回應內容是Hello fibjs!
。
繼承關係
建構函數
HttpRequest
HttpRequest 建構函數,建立一個新的HttpRequest 對象
1new HttpRequest();
常量
TEXT
指定訊息類型1,代表一個文字類型
1const HttpRequest.TEXT = 1;
BINARY
指定訊息類型2,代表一個二進位類型
1const HttpRequest.BINARY = 2;
成員屬性
response
HttpResponse, 取得回應訊息對象
1readonly HttpResponse HttpRequest.response;
method
String, 查詢與設定請求方法
1String HttpRequest.method;
address
String, 查詢與設定請求位址
1String HttpRequest.address;
queryString
String, 查詢與設定請求查詢字串
1String HttpRequest.queryString;
cookies
HttpCollection, 取得包含訊息cookies 的容器
1readonly HttpCollection HttpRequest.cookies;
form
HttpCollection, 取得包含訊息form 的容器
1readonly HttpCollection HttpRequest.form;
query
HttpCollection, 取得包含訊息query 的容器
1readonly HttpCollection HttpRequest.query;
protocol
String, 協定版本訊息,允許的格式為:HTTP/#.#
1String HttpRequest.protocol;
headers
HttpCollection, 包含訊息中http訊息頭的容器,唯讀屬性
1readonly HttpCollection HttpRequest.headers;
keepAlive
Boolean, 查詢和設定是否保持連接
1Boolean HttpRequest.keepAlive;
upgrade
Boolean, 查詢和設定是否為升級協議
1Boolean HttpRequest.upgrade;
maxHeadersCount
Integer, 查詢並設定最大請求頭個數,缺省為128
1Integer HttpRequest.maxHeadersCount;
maxHeaderSize
Integer, 查詢並設定最大請求頭長度,預設為8192
1Integer HttpRequest.maxHeaderSize;
maxBodySize
Integer, 查詢並設定body 最大尺寸,以MB 為單位,預設為64
1Integer HttpRequest.maxBodySize;
socket
Stream, 查詢目前物件的來源socket
1readonly Stream HttpRequest.socket;
value
String, 訊息的基本內容
1String HttpRequest.value;
params
NArray, 訊息的基本參數
1readonly NArray HttpRequest.params;
type
Integer, 訊息類型
1Integer HttpRequest.type;
data
Value, 查詢訊息的數據,此屬性會根據content-type 傳回不同數據,當text 時,傳回文本,為json時返回json,其它時候返回二進制
1readonly Value HttpRequest.data;
body
SeekableStream, 包含訊息資料部分的流對象
1SeekableStream HttpRequest.body;
length
Long, 訊息資料部分的長度
1readonly Long HttpRequest.length;
stream
Stream, 查詢訊息readFrom 時的流對象
1readonly Stream HttpRequest.stream;
lastError
String, 查詢與設定訊息處理的最後錯誤
1String HttpRequest.lastError;
成員函數
hasHeader
檢查是否存在指定鍵值的訊息頭
1Boolean HttpRequest.hasHeader(String name);
呼叫參數:
- name: String, 指定要檢查的鍵值
回傳結果:
- Boolean, 返回鍵值是否存在
firstHeader
查詢指定鍵值的第一個訊息頭
1String HttpRequest.firstHeader(String name);
呼叫參數:
- name: String, 指定要查詢的鍵值
回傳結果:
- String, 傳回鍵值所對應的值,若不存在,則傳回undefined
allHeader
查詢指定鍵值的全部訊息頭
1NObject HttpRequest.allHeader(String name = "");
呼叫參數:
- name: String, 指定要查詢的鍵值,傳遞空字串傳回全部鍵值的結果
回傳結果:
- NObject, 傳回鍵值所對應全部值的數組,若資料不存在,則傳回null
addHeader
新增一個訊息頭,新增資料並不修改已存在的鍵值的訊息頭
1HttpRequest.addHeader(Object map);
呼叫參數:
- map: Object, 指定要新增的鍵值資料字典
新增指定名稱的一組訊息頭,新增資料並不會修改已存在的鍵值的訊息頭
1
2HttpRequest.addHeader(String name,
Array values);
呼叫參數:
- name: String, 指定要新增的鍵值
- values: Array, 指定要新增的一組數據
新增一個訊息頭,新增資料並不修改已存在的鍵值的訊息頭
1
2HttpRequest.addHeader(String name,
String value);
呼叫參數:
- name: String, 指定要新增的鍵值
- value: String, 指定要新增的數據
setHeader
設定一個訊息頭,設定資料將修改鍵值所對應的第一個數值,並清除相同鍵值的其餘訊息頭
1HttpRequest.setHeader(Object map);
呼叫參數:
- map: Object, 指定要設定的鍵值資料字典
設定指定名稱的一組訊息頭,設定資料將修改鍵值所對應的數值,並清除相同鍵值的其餘訊息頭
1
2HttpRequest.setHeader(String name,
Array values);
呼叫參數:
- name: String, 指定要設定的鍵值
- values: Array, 指定要設定的一組數據
設定一個訊息頭,設定資料將修改鍵值所對應的第一個數值,並清除相同鍵值的其餘訊息頭
1
2HttpRequest.setHeader(String name,
String value);
呼叫參數:
- name: String, 指定要設定的鍵值
- value: String, 指定要設定的數據
removeHeader
刪除指定鍵值的全部訊息頭
1HttpRequest.removeHeader(String name);
呼叫參數:
- name: String, 指定要刪除的鍵值
read
從流內讀取指定大小的數據,此方法為body 對應方法的別名
1Buffer HttpRequest.read(Integer bytes = -1) async;
呼叫參數:
- bytes: Integer, 指定要讀取的資料量,預設為讀取隨機大小的資料區塊,讀取的資料尺寸取決於設備
回傳結果:
- Buffer, 傳回從流內讀取的數據,若無數據可讀,或連線中斷,則傳回null
readAll
從流內讀取剩餘的全部數據,此方法為body 對應方法的別名
1Buffer HttpRequest.readAll() async;
回傳結果:
- Buffer, 傳回從流內讀取的數據,若無數據可讀,或連線中斷,則傳回null
write
寫入給定的數據,此方法為body 對應方法的別名
1HttpRequest.write(Buffer data) async;
呼叫參數:
- data:Buffer, 給定要寫入的數據
json
以JSON 編碼寫入給定的數據
1Value HttpRequest.json(Value data);
呼叫參數:
- data: Value, 給定要寫入的數據
回傳結果:
- Value, 此方法不會傳回數據
以JSON 編碼解析訊息中的數據
1Value HttpRequest.json();
回傳結果:
- Value, 回傳解析的結果
pack
以msgpack編碼寫入給定的數據
1Value HttpRequest.pack(Value data);
呼叫參數:
- data: Value, 給定要寫入的數據
回傳結果:
- Value, 此方法不會傳回數據
以msgpack編碼解析訊息中的數據
1Value HttpRequest.pack();
回傳結果:
- Value, 回傳解析的結果
end
設定當前訊息處理結束,Chain處理器不再繼續後面的事務
1HttpRequest.end();
isEnded
查詢目前訊息是否結束
1Boolean HttpRequest.isEnded();
回傳結果:
- Boolean, 結束則回傳true
clear
清除訊息的內容
1HttpRequest.clear();
sendTo
發送格式化訊息到給定的流對象
1HttpRequest.sendTo(Stream stm) async;
呼叫參數:
- stm:Stream, 指定接收格式化訊息的流對象
readFrom
從給定的快取流對象讀取格式化訊息,並解析填充對象
1HttpRequest.readFrom(Stream stm) async;
呼叫參數:
- stm:Stream, 指定讀取格式化訊息的流對象
toString
傳回物件的字串表示,一般回傳"[Native Object]",物件可以根據自己的特性重新實現
1String HttpRequest.toString();
回傳結果:
- String, 傳回物件的字串表示
toJSON
傳回物件的JSON 格式表示,一般傳回物件定義的可讀屬性集合
1Value HttpRequest.toJSON(String key = "");
呼叫參數:
- key: String, 未使用
回傳結果:
- Value, 傳回包含可JSON 序列化的值