API Gateway能否对接AWS Lambda中Node路由?部署后404问题求助
我来帮你搞定这个API Gateway和Node路由对接的404问题!用AWSServerlessExpress把Node应用部署到Lambda后,路由映射确实容易踩坑,我给你一步步拆解正确的配置方式:
核心解决方案:用Lambda代理集成(推荐)
这是最省心的方式,能让API Gateway把完整的请求路径、方法直接传递给你的Express路由,不用手动逐个配置路由映射。
1. 配置API Gateway的代理资源
- 打开AWS API Gateway控制台,选中你的目标API
- 点击左侧的「资源」,在根路径(/)上右键选择「创建资源」
- 勾选**「配置为代理资源」**,然后填写资源名称(比如
proxy),路径会自动生成/{proxy+} - 下一步选择「Lambda代理集成」,选择你的Lambda函数所在区域和函数名称
- 完成创建后,记得点击「部署API」,选择一个阶段(比如
prod)完成部署
2. 检查Lambda里的Express代码配置
确保你的AWSServerlessExpress代码没有多余的路径前缀,让Express直接处理完整路径:
const express = require('express'); const awsServerlessExpress = require('aws-serverless-express'); const app = express(); // 定义你的GET/POST路由 app.get('/users', (req, res) => { res.json({ status: 'success', data: 'GET /users 响应正常' }); }); app.post('/users', (req, res) => { res.json({ status: 'success', data: 'POST /users 响应正常' }); }); // 创建Server并导出handler const server = awsServerlessExpress.createServer(app); exports.handler = (event, context) => { awsServerlessExpress.proxy(server, event, context); };
3. 测试与排障
部署完成后,你的API访问地址大概是这样的:https://xxxxxx.execute-api.xx-xxxx-x.amazonaws.com/prod
- 访问
https://xxxxxx.execute-api.xx-xxxx-x.amazonaws.com/prod/users,就能触发Express里的GET /users路由 - 如果还是404,检查这几个关键点:
- 确认API Gateway的代理资源方法是
ANY(这样GET/POST/PUT等所有HTTP方法都能通过) - 查看Lambda的CloudWatch日志,看
event.path字段是不是你请求的路径(比如/users),如果带了阶段名(比如/prod/users),说明代理配置有问题 - 检查Lambda执行角色是否有API Gateway调用它的权限(可以在Lambda控制台「配置」→「权限」里查看)
- 确认Express路由没有拼写错误(比如把
/users写成/user)
- 确认API Gateway的代理资源方法是
备选方案:手动映射单个路由(不推荐)
如果你不想用代理集成,也可以逐个配置路由:
- 在API Gateway里新建对应资源(比如
/users),然后新建GET/POST方法 - 选择「Lambda集成」,在「集成请求」里设置映射模板,把API Gateway的请求参数映射到Lambda的event中
- 在Lambda里根据event的
httpMethod和resource字段,手动路由到对应的Express处理函数
这种方式比较繁琐,适合路由极少的场景。
内容的提问来源于stack exchange,提问作者Gopi Raju
相关产品推荐
相关产品推荐

