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

Node.js中调用DynamoDB put.promise()报‘不是函数’错误排查

解决AWS Lambda中DynamoDB DocumentClient put().promise() 不是函数的错误

这个错误我之前在做无服务器项目时也碰到过,大概率是AWS SDK版本差异导致的,下面给你几个可行的解决方案:

1. 升级AWS SDK版本

旧版的AWS SDK for JavaScript(尤其是Lambda环境默认的老版本)里,DocumentClient的方法可能没有自带.promise()方法。你可以先试试升级本地的SDK依赖:

npm update aws-sdk --save

升级完成后,你的原有代码应该就能正常运行了——新版本的put()方法返回的对象已经包含.promise()方法。

2. 用util.promisify兼容旧版本

如果因为某些原因没法升级SDK,那就用Node.js内置的util.promisify把回调风格的方法转换成Promise风格:

const AWS = require("aws-sdk");
const util = require("util");
const client = new AWS.DynamoDB.DocumentClient();
// 把put方法转换成Promise版
const putItem = util.promisify(client.put.bind(client));
const uuid = require("uuid");

module.exports.myHero = async (event) => {
  const data = JSON.parse(event.body);
  const params = {
    TableName: "myHeros",
    Item: {
      id: uuid(),
      name: data.name,
      checked: false
    }
  };
  await putItem(params); // 用转换后的方法代替原来的client.put(params).promise()
  return {
    statusCode: 200,
    body: JSON.stringify(data)
  };
};

3. 确认Lambda部署包中的SDK版本

Lambda默认提供的AWS SDK版本可能比较旧,如果你没有把自己安装的aws-sdk打包进去,就会使用环境里的旧版本。这种情况下,你可以:

  • 执行npm install aws-sdk --save,然后把整个node_modules目录一起打包部署到Lambda,这样函数就会使用你本地安装的新版本SDK。
  • 或者直接用上面第二种方法的util.promisify来兼容。

另外再确认下你的DocumentClient初始化是对的,别不小心写成new AWS.DynamoDB()了——从你的代码来看这部分是没问题的,但还是可以再检查一遍。

修改完之后重新部署测试,应该就能正常往DynamoDB添加记录啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:16:33