有一个简单的 aws lambda(.mjs 文件)。有一个简单的 API 网关,使用代理集成。有一个简单的网络表单,
<form method="post" action="...">
<input type="text" name="team">
<input type="text" name="score">
<input type="submit" value="send">
在 lambda 中,“事件”捕获从网关发送的整个信息块
export const handler = async (event, context) => {
...
例如,您可以在这里找到 queryStringParameters,
queryStringParameters: { 示例: 'value' },
标题在这里
headers: {
accept: '*/*',
...
等等。问题的实质内容被标记为“身体”
body: 'team=sec+west&score=42',
实际例子!
据我所知(似乎完全没有记录)html 表单参数以 url 查询字符串样式字符串的形式传递。
因此,我总是这样简单地解析它们......
import querystring from 'querystring'
...
if (event.body) {
console.log('here is the "body" ...')
console.log(event.body)
let parsed = querystring.decode(event.body)
team = parsed.team
请注意,这个问题严格且仅涉及 使用代理集成网关。 (当然,您可以不使用代理集成,而是以任何您想要的方式映射它。)
还要注意,这是关于 使用 html 表单。如果您使用(例如)带有
-d '{ "team":"sec, "score":11 }'
形式的curl,这是完全不同的事情,并且它以完全不同的方式交付(通过代理集成模式 API 网关)。
(另外,我不是在谈论多部分数据,只是一个普通的 html 表单。)
所以鉴于
event.body
是
body: 'team=sec+west&score=42',
(正如屏幕截图所示)获取这些值的最佳方法到底是什么?
对于这样一项普遍存在的任务,必须包含一个库(例如查询字符串)似乎很不寻常。 aws 对 node/lambdas 的看法有很多“特殊”的东西,有什么特殊的方法吗?
我对 Node/js 的理解可能很薄弱,我一直听说查询字符串已被弃用
肯定有一种通常的标准惯用方法来完成这种最常见的事情吗? “获取 html 表单”
正如我提到的,我真的不知道知道这是否是是一个url查询字符串样式的字符串。它完全没有记录,而且在很多情况下,aws 使用的东西表面上看起来像其他东西,但实际上并非如此!
(它说表单的默认enctype是application/x-www-form-urlencoded
,进一步解释
here),这就是HTML表单默认的工作方式,而不是特定于AWS Lambda。 AWS Lambda 只是按照浏览器发送原始正文的方式为您提供原始正文。
querystring
已弃用,取而代之的是
URLSearchParams
类(从 Node v10 开始不需要外部库):
const params = new URLSearchParams(event.body)
console.log(params.get('team'))