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