中间件和辅助函数
Gatsby Functions 提供了一个 类似 Express 的 架构,可以简化 Node.js API 的构建。我们包含了一些中间件来解析常见的请求数据,以及一些响应辅助函数。
数据格式
我们解析常用的数据类型。您可以通过 添加自定义中间件 来解析更多内容。默认在 req 对象上可用的数据
req.cookies中的 Cookie- URL 查询参数 (例如
api/foo?query=foo) 在req.query中 - 表单参数和数据在
req.body中 - JSON POST 请求体在
req.body中 - 从表单上传的文件在
req.files中
响应辅助函数
res.send(body)— 返回响应。body可以是string、object或bufferres.json(body)— 返回 JSON 响应。body可以是任何能通过JSON.stringify()序列化的值res.status(statusCode)— 设置响应的 HTTP 状态码。默认为200。res.redirect([statusCode], url)— 返回一个重定向到 URL 的响应。可以选择设置 statusCode,默认为302。
自定义中间件
支持自定义的 Connect/Express 中间件。
一个如何为 Function 添加 CORS 支持的示例
自定义请求体解析
支持覆盖
gatsby@4.14.0中引入的默认配置
默认情况下,Gatsby 使用以下默认配置来解析请求体,并将其作为适当格式的 req.body 字段提供。
这些设置在大多数情况下都有效,但有时您可能需要调整它们以适应您的用例。Gatsby 允许您从函数处理程序模块中导出名为 config 的对象。此对象允许您控制 Gatsby Functions 使用的 body-parser 中间件。Gatsby 目前支持 bodyParser 配置的 limit、type 和 extended 选项,这些选项已在 body-parser 中进行了文档说明。 limit 属性允许配置高达 32mb 的载荷大小。
示例
将请求体访问为 Buffer
您可以修改特定 body-parser 中间件可以处理的 Content-type。以下配置将强制每个请求使用 raw 解析器,并使函数处理程序接收 req.body 作为 Buffer。如果需要验证 Webhook 的签名(例如 https://stripe.com/docs/webhooks/signatures),则此类设置非常有用。
增加或减少载荷限制
默认限制为 100kb。如果请求体大于此限制,将直接返回 413 Request Entity Too Large 响应,而不会执行函数处理程序。
如果您的用例需要更高的限制,您可以在 config 中进行调整。
TypeScript (config 对象类型)
您可以从 gatsby 中导入 GatsbyFunctionConfig 来为您的 config 导出添加类型。
配置的应用方式
当使用 config 并更改其中一个 body parser 中间件的 type 时,重要的是要认识到所有 body parser 中间件仍然会按照这个特定的顺序应用。
rawtexturlencodedjson
这是一个具体的例子
如果您希望 json 用于给定函数的所有可能请求,那么仅为 json 中间件设置 type: "*/*" 是不够的。您还需要更改优先级更高的中间件的 type,这样它们就不会意外地匹配并处理请求,而 json 中间件尚无法处理。