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