全部產品
Search
文件中心

:HTTP請求處理常式(HTTP Handler)

更新時間:Jul 06, 2024

您可以使用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)
};

前提條件

建立服務

操作步驟

  1. 登入Function Compute控制台,在左側導覽列,單擊服務及函數
  2. 在頂部功能表列,選擇地區,然後在服務列表頁面,單擊目標服務。
  3. 函數管理頁面,單擊建立函數

    建立運行環境為Node.js 14.x的HTTP函數。具體操作步驟,請參見建立函數

  4. 函數詳情頁面,單擊函數代碼頁簽,在代碼編輯器中輸入上述範例程式碼,然後單擊部署代碼

    說明

    上述範例程式碼中函數的請求處理常式是index.js中的handler方法。如果您的函數配置的請求處理常式不同,請擷取對應的檔案和方法進行更新。具體資訊,請參見函數執行個體生命週期回調方法

  5. 函數代碼頁簽,單擊測試函數右側的down表徵圖,從下拉式清單中選擇配置測試參數

  6. 配置測試參數面板,選擇建立新測試請求編輯已有測試請求,配置以下參數,然後單擊確定

    • 請求名稱:輸入自訂請求名稱。

    • 請求方式:選擇POST

    • 請求路徑:輸入?foo=bar

    • 請求 Body:在代碼框中輸入hello,fc

  7. 單擊測試函數

    函數執行成功後,您可以看到返回結果中包含的用戶端IP地址等資訊。