为何aws-serverless-express将POST /retrieveInfo请求路由至GET /路径?
问题分析与解决
核心原因
你遇到的路由错误是因为API Gateway传入的是v2格式的事件(version: '2.0'),而aws-serverless-express默认只兼容API Gateway v1格式的事件。v2事件的请求方法、路径等信息嵌套在requestContext.http下,而aws-serverless-express会尝试读取顶层的httpMethod和path字段,导致解析错误,最终匹配到了默认的GET /路由。
解决方案
需要将API Gateway v2事件转换为aws-serverless-express兼容的格式,官方提供了eventHelper工具来处理这个转换:
修改后的代码
/* global fetch */ import express from 'express'; import serverless, { eventHelper } from 'aws-serverless-express'; const app = express(); app.use(express.json()); app.get('/', (request, response) => { response.json({'pizza': 'potato'}); }) app.post('/retrieveInfo', (request, response) => { response.json({'pizza': 'pop'}); }); const server = serverless.createServer(app); export const handler = (event, context) => { console.log("Event: ", event); console.log("Context: ", context); // 转换API Gateway v2事件为兼容格式 const convertedEvent = eventHelper.convertApiGatewayV2Event(event); serverless.proxy(server, convertedEvent, context); };
额外检查点
- 确保你的
aws-serverless-express版本是最新的(>=3.4.0),旧版本可能没有eventHelper工具 - 确认API Gateway的集成配置中,没有修改请求路径或方法的映射规则
内容的提问来源于stack exchange,提问作者Dominik Cubic
相关产品推荐
相关产品推荐

