您可以使用HTTP請求處理常式更方便地處理HTTP請求。當調用函數時,Function Compute使用您提供的執行方法來處理HTTP請求。本文介紹Node.js HTTP請求處理常式的結構特點和使用樣本等。
HTTP Handler簽名
Node.js的HTTP Handler的簽名如下。您只需實現一個函數,就能響應HTTP請求。
exports.handler = (req, resp, context) => {
console.log("receive body: ", req.body.toString());
resp.setHeader("Content-Type", "text/plain");
resp.send('<h1>Hello, world!</h1>');
}
樣本解析如下:
handler
:HTTP Handler名稱。req
:HTTP請求結構體。resp
:HTTP返回結構體。context
:上下文資訊。具體資訊,請參見上下文。
HTTP請求結構體
欄位 | 類型 | 描述 |
headers | Object | 存放來自HTTP用戶端的索引值對。 |
path | String | 表示HTTP路徑。 |
queries | Object | 存放來自HTTP路徑中的查詢部分的索引值對,值的類型可以為字串或數組。 |
method | String | 表示HTTP方法。 |
clientIP | String | 用戶端的IP地址。 |
url | String | 請求的地址。 |
Headers索引值對中的key
中包含以下欄位或以x-fc-
開頭的key
均會被忽略,因此,不支援自訂。
connection
keep-alive
HTTP響應結構體
方法 | 類型 | 描述 |
response.setStatusCode(statusCode) | interger | 設定狀態代碼。 |
response.setHeader(headerKey, headerValue) | String,String | 設定回應標頭。 |
response.deleteHeader(headerKey) | String | 刪除回應標頭。 |
response.send(body) | Buffer,String,Stream.Readable | 發送響應體。 |
headerKey
中包含以下欄位或以x-fc-
開頭的headerKey
均會被忽略,因此,不支援自訂。
connection
content-length
date
keep-alive
server
upgrade
限制說明
要求節流
如果超過以下限制,會返回400狀態代碼和InvalidArgument錯誤碼。
欄位
限制說明
HTTP狀態代碼
錯誤碼
headers
要求標頭中的所有鍵和值的總大小不能超過8 KB。
400
InvalidArgument
path
請求路徑以及所有查詢參數的總大小不能超過4 KB。
body
同步調用請求的Body的總大小不能超過32 MB,非同步呼叫請求的Body的總大小不能超過128 KB。
響應限制
如果超過以下限制,會返回502狀態代碼和BadResponse錯誤碼。
欄位
限制說明
HTTP狀態代碼
錯誤碼
headers
回應標頭中的所有鍵和值對的大小不能超過8 KB。
502
BadResponse
樣本:擷取HTTP請求詳細資料並返回Body
範例程式碼
module.exports.handler = function (request, response, context) {
// get request header
var reqHeader = request.headers
var headerStr = ' '
for (var key in reqHeader) {
headerStr += key + ':' + reqHeader[key] + ' '
};
// get request info
var url = request.url
var path = request.path
var queries = request.queries
var queryStr = ''
for (var param in queries) {
queryStr += param + "=" + queries[param] + ' '
};
var method = request.method
var clientIP = request.clientIP
var body = request.body
var respBody = new Buffer('requestHeader:' + headerStr + '\n' + 'url: ' + url + '\n' + 'path: ' + path + '\n' + 'queries: ' + queryStr + '\n' + 'method: ' + method + '\n' + 'clientIP: ' + clientIP + '\n' + 'body: ' + body + '\n')
response.setStatusCode(200)
response.setHeader('content-type', 'application/json')
response.send(respBody)
};
前提條件
操作步驟
- 登入Function Compute控制台,在左側導覽列,單擊服務及函數。
- 在頂部功能表列,選擇地區,然後在服務列表頁面,單擊目標服務。
在函數管理頁面,單擊建立函數。
建立運行環境為Node.js 14.x的HTTP函數。具體操作步驟,請參見建立函數。
在函數詳情頁面,單擊函數代碼頁簽,在代碼編輯器中輸入上述範例程式碼,然後單擊部署代碼。
說明上述範例程式碼中函數的請求處理常式是
index.js
中的handler
方法。如果您的函數配置的請求處理常式不同,請擷取對應的檔案和方法進行更新。具體資訊,請參見函數執行個體生命週期回調方法。在函數代碼頁簽,單擊測試函數右側的表徵圖,從下拉式清單中選擇配置測試參數。
在配置測試參數面板,選擇建立新測試請求或編輯已有測試請求,配置以下參數,然後單擊確定。
請求名稱:輸入自訂請求名稱。
請求方式:選擇POST。
請求路徑:輸入?foo=bar。
請求 Body:在代碼框中輸入hello,fc。
單擊測試函數。
函數執行成功後,您可以看到返回結果中包含的用戶端IP地址等資訊。