在 aws 代理集成 js lambda 中,是否有正确或标准的方法从 event.body 获取 html 表单值,而不仅仅是使用查询字符串?

问题描述 投票:0回答:1

有一个简单的 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 使用的东西表面上看起来像其他东西,但实际上并非如此!

node.js amazon-web-services aws-lambda aws-api-gateway
1个回答
2
投票
here

(它说表单的默认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'))

© www.soinside.com 2019 - 2024. All rights reserved.