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

API Gateway+Lambda写入DynamoDB报502及put.promise.then不是函数如何解决?

问题根因定位
  • 调用方法语法错误:这是该报错最核心的触发原因。AWS SDK v2 中 DocumentClient 的 put 方法返回的是 AWS.Request 实例,需要调用带括号的 .promise() 方法才能返回 Promise 对象,如果你写代码时漏写了括号,将 .promise() 写成了 .promise,此时拿到的是函数本身而非 Promise 实例,调用 .then 就会抛出该异常。
  • AWS SDK 版本不匹配:如果你的项目依赖的是 AWS SDK v3,就不能沿用 v2 的调用语法,v3 中没有 put().promise() 这种写法,需要配合 PutCommand 和 send() 方法完成调用,版本不匹配时也会触发该错误。
  • 变量覆盖问题:检查代码中实例化 DocumentClient 之后,是否有其他逻辑重新给 dynamodb 变量赋值为非 DocumentClient 实例,也会导致方法调用异常。
修复方案
  • 若使用 AWS SDK v2,修正调用语法即可,标准写法参考:
const AWS = require('aws-sdk');
const dynamodb = new AWS.DynamoDB.DocumentClient();

const params = {
  TableName: '你的DynamoDB表名',
  Item: {
    // 写入数据的字段键值对
  }
};

// 注意promise后必须加括号执行
dynamodb.put(params).promise()
  .then(res => console.log('写入成功', res))
  .catch(err => console.error('写入失败', err));
  • 若使用 AWS SDK v3,调整为v3标准调用写法:
const { DynamoDBClient } = require("@aws-sdk/client-dynamodb");
const { DynamoDBDocumentClient, PutCommand } = require("@aws-sdk/lib-dynamodb");

const client = new DynamoDBClient({});
const dynamodb = DynamoDBDocumentClient.from(client);

const params = {
  TableName: '你的DynamoDB表名',
  Item: {
    // 写入数据的字段键值对
  }
};

dynamodb.send(new PutCommand(params))
  .then(res => console.log('写入成功', res))
  .catch(err => console.error('写入失败', err));
502错误说明

API Gateway返回502 Bad Gateway是该JS异常的连锁反应:Lambda执行时抛出了未捕获的错误,无法返回符合API Gateway要求的响应格式,只要修复上述代码问题,502错误会同步解决。

内容的提问来源于stack exchange,提问作者Sai Teja Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:45:03