使用AWS lambda和middy修复未知http事件格式



这是一个测试lambda。应在哪里指定格式?middy现在是否需要在某处指定event.requestContext.http.method?

import 'source-map-support/register';
import type { ValidatedEventAPIGatewayProxyEvent } from '@libs/apiGateway';
import { formatJSONResponse } from '@libs/apiGateway';
import { middyfy } from '@libs/lambda';
import schema from './schema';
const hello: ValidatedEventAPIGatewayProxyEvent<typeof schema> = async (event) => {
return formatJSONResponse({
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Credentials': true,
},
message: `Hello ${event.body.name}, welcome to the exciting Serverless world!`,
event,
});
}
export const main = middyfy(hello);

环境是

"@middy/core": "^3.1.0",
"@middy/http-cors": "^3.1.0",

无服务器:框架核心:3.21.0(本地(3.21.0(全局(

通过执行

无服务器调用本地——函数hello——路径src/functions/hello/mock.json

"errorMessage": "[http-cors] Unknown http event format",
"errorType": "Error",
"stackTrace": [
"Error: [http-cors] Unknown http event format",
"    at httpCorsMiddlewareAfter (/Users/jrobens/NetBeansProjects/azuron/winpay/winpay-admin-api/node_modules/@middy/http-cors/index.cjs:82:19)",

@middy/http-cors同时支持REST(v1(和http(v2(AWS事件。您的测试事件不完全符合HTTP(v2(AWS事件结构。将其包含event.requestContext.http.method将解决此问题。AWS文档中的示例:https://docs.aws.amazon.com/lambda/latest/dg/services-apigateway.html.

运行serverless invoke local时,生成的事件没有指定httpMethod。这是使用"http"作为lambda事件类型的。

当部署它时,它可以正常工作,使用jest的单元测试也可以设置此属性。

最新更新