您可以使用HTTP请求处理程序更方便地处理HTTP请求。当调用函数时,函数计算使用您提供的执行方法来处理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 请求头中的所有键和值的总大小不能超过4 KB。 400 InvalidArgument
    path 请求路径以及所有查询参数的总大小不能超过4 KB。
    body 同步调用请求的Body的总大小不能超过16 MB,异步调用请求的Body的总大小不能超过128 KB。
  • 响应限制

    如果超过以下限制,会返回502状态码和BadResponse错误码。

    字段 限制说明 HTTP状态码 错误码
    headers 响应头中的所有键和值对的大小不能超过4 KB。 502 BadResponse

示例:获取HTTP请求详细信息并返回Body

示例代码

module.exports.handler = function (request, response, context) {
    // get requset 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. 登录函数计算控制台
  2. 在左侧导航栏,单击服务及函数
  3. 在顶部菜单栏,选择地域。
  4. 服务列表页面,单击目标服务。
  5. 函数管理页面,单击创建函数
    创建运行环境为Node.js 14.x的HTTP函数。具体操作步骤,请参见创建函数
  6. 函数详情页面,单击函数代码页签,在代码编辑器中输入上述示例代码,然后单击保存并部署
    说明 上述示例代码中函数的请求处理程序是index.js中的handler方法。如果您的函数的请求处理程序(函数入口)配置不同,请找到对应的文件和方法进行更新。具体信息,请参见函数实例生命周期回调方法
  7. 函数代码页签,单击测试函数右侧的down图标,从下拉列表中选择配置测试参数
  8. 配置测试参数面板,选择创建新测试请求编辑已有测试请求,配置以下参数,然后单击确定
    • 请求名称:输入自定义请求名称。
    • 请求方式:选择POST
    • 请求路径:输入?foo=bar
    • 请求 Body:在代码框中输入hello,fc
  9. 单击测试函数
    函数执行成功后,您可以看到返回结果中包含的客户端IP地址等信息。