You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将AWS DynamoDB Stream经Lambda、API Gateway传递至前端?

解决Lambda通过API Gateway向前端EventSource传递数据的问题

核心排查与修复步骤

1. 切换API Gateway类型(关键)

REST API默认会缓冲完整响应后再返回,无法支持SSE的流式传输逻辑。你需要将API切换为API Gateway v2(HTTP API),它原生支持流式响应,能正确传递SSE格式的数据。

如果坚持使用REST API,需在集成请求中设置Content Handling为Passthrough,避免API Gateway对响应体做JSON解析或编码,破坏SSE格式。

2. 修正Lambda响应细节

  • 先确认stream变量存在有效数据:在Lambda代码中添加console.log(stream),通过CloudWatch日志验证数据是否正常。
  • 优化SSE格式的写法,避免转义问题:
return {
  statusCode: 200,
  body: `data: ${JSON.stringify({ message: stream })}\n\n`,
  headers: {
    "Content-Type": "text/event-stream",
    "Cache-Control": "no-cache",
    "Connection": "keep-alive",
    "Access-Control-Allow-Origin": "*"
  }
};

3. 前端EventSource正确解析数据

前端收到的event.data是字符串,必须手动解析为JSON,否则会得到空对象或原始字符串:

const eventSource = new EventSource('你的API Gateway访问URL');
eventSource.onmessage = (event) => {
  try {
    const parsedData = JSON.parse(event.data);
    console.log('接收的流数据:', parsedData);
  } catch (err) {
    console.error('数据解析失败:', err);
  }
};
eventSource.onerror = (err) => {
  console.error('EventSource连接错误:', err);
  eventSource.close();
};

4. 清理API Gateway的方法响应配置

  • 在API Gateway的方法响应中,移除200状态码对应的响应模型(模型会强制将响应转为JSON,破坏SSE流格式)。
  • 确保200状态码的响应头包含Content-Type,值设置为text/event-stream。

5. 验证Lambda执行日志

通过CloudWatch查看Lambda的执行日志,确认返回的body内容符合SSE格式(例如data: {"message": "你的流数据内容"}),同时确认stream变量没有为空。


内容的提问来源于stack exchange,提问作者lambneck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 11:37:50