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

使用DynamoDBDocumentClient与UpdateCommand时遇TypeError错误求助

解决AWS Lambda中DynamoDB UpdateCommand的TypeError问题

在AWS Lambda运行代码时遇到以下错误,错误栈指向docClient.send(updateCommand)代码行,已确认updateCommand是UpdateCommand类型,但仍无法定位问题:

错误信息

{
    "errorType": "TypeError",
    "errorMessage": "command.resolveMiddleware is not a function",
    "stack": [
        "TypeError: command.resolveMiddleware is not a function",
        "    at _DynamoDBDocumentClient.send (/var/task/node_modules/@smithy/smithy-client/dist-cjs/index.js:111:29)",
        "    at Runtime.handler (file:///var/task/index.js:28:25)",
        "    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"
    ]
}

相关代码

import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { DynamoDBDocumentClient, UpdateCommand } from "@aws-sdk/lib-dynamodb";

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

export const handler = async (event) => {
    const { userId, id, processedPurchases } = event;

    const key = {
        userId: userId,
        id: id
    };

    try {
        const updateCommand = buildUpdateCommand(key, processedPurchases);
        console.log(updateCommand);

        await docClient.send(updateCommand);
    } catch(e) {
        console.error(`There was an error processing transaction ${id} from ${userId}`, e);
        throw e;
    }

};

function buildUpdateCommand(key, processedPurchases) {

    const pPurchases = [some code]

    const orderEvent = {some code}

    const updateCommand = new UpdateCommand({
        TableName: process.env.TABLENAME,
        Key: key,
        UpdateExpression: 'SET orderHistory = list_append(orderHistory, :orderEvent), SET processedPurchases = :processedPurchases',
        ExpressionAttributeValues: {
            ':processedPurchases': pPurchases,
            ':orderEvent': orderEvent
        }
    });

    return updateCommand;
}

解决方法

  • 统一SDK包版本:@aws-sdk/client-dynamodb和@aws-sdk/lib-dynamodb必须使用完全一致的版本,因为lib-dynamodb依赖client-dynamodb的内部实现,版本不匹配会导致命令对象无法被docClient正确识别。检查package.json中的版本号,将两个包升级或降级到同一稳定版本,重新安装依赖后重新部署。

  • 确认UpdateCommand导入来源:确保UpdateCommand是从@aws-sdk/lib-dynamodb导入,而非@aws-sdk/client-dynamodb。DynamoDBDocumentClient需要使用lib-dynamodb封装后的命令,原始client-dynamodb的命令无法被其正确处理。

  • 清理依赖缓存:Lambda部署时可能存在旧依赖缓存,导致运行时加载的代码存在异常。本地删除node_modules、package-lock.json(或yarn.lock),重新安装依赖后打包部署;也可以在Lambda控制台重新部署并清理部署包缓存。

  • 检查UpdateCommand参数格式:虽然表面类型正确,但参数错误可能导致命令对象内部初始化异常。比如UpdateExpression中使用list_append时,第二个参数必须是数组,若orderEvent是单个对象,需改为:orderEvent: [orderEvent],否则不仅会触发DynamoDB逻辑错误,还可能间接导致命令对象的方法缺失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 09:21:12