您可以使用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
请求头中的所有键和值的总大小不能超过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)
};
前提条件
操作步骤
- 登录函数计算控制台,在左侧导航栏,单击服务及函数。
- 在顶部菜单栏,选择地域,然后在服务列表页面,单击目标服务。
在函数管理页面,单击创建函数。
创建运行环境为Node.js 14.x的HTTP函数。具体操作步骤,请参见创建函数。
在函数详情页面,单击函数代码页签,在代码编辑器中输入上述示例代码,然后单击部署代码。
说明上述示例代码中函数的请求处理程序是
index.js
中的handler
方法。如果您的函数配置的请求处理程序不同,请获取对应的文件和方法进行更新。具体信息,请参见函数实例生命周期回调方法。在函数代码页签,单击测试函数右侧的图标,从下拉列表中选择配置测试参数。
在配置测试参数面板,选择创建新测试请求或编辑已有测试请求,配置以下参数,然后单击确定。
请求名称:输入自定义请求名称。
请求方式:选择POST。
请求路径:输入?foo=bar。
请求 Body:在代码框中输入hello,fc。
单击测试函数。
函数执行成功后,您可以看到返回结果中包含的客户端IP地址等信息。