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

为何调用DynamoDB put接口时报错:Missing the key nineId in the item?

问题解决:DynamoDB提交数据提示缺少主键nineId

报错原因

你的DynamoDB表nine-project的主键为nineId,但通过Express接口提交的req.body中未包含该字段。DynamoDB的put操作强制要求传入主键值,因此触发参数无效报错。

修复方案

方案1:确保前端请求包含nineId字段

检查调用接口的前端请求体,确认携带nineId键值对,示例请求体:

{
  "nineId": "unique-12345",
  // 其他业务字段...
}

方案2:后端自动生成nineId(无需前端传入)

如果主键无需前端指定,可在后端通过UUID生成唯一标识,示例修改代码:

const express = require('express');
const router = express.Router();
const AWS = require('aws-sdk');
// 先安装依赖:npm install uuid
const { v4: uuidv4 } = require('uuid');

AWS.config.update({
    region:'us-east-2'
})
const dynamodb = new AWS.DynamoDB.DocumentClient();
const dynamodbTableName = 'nine-project';

router.post('/', async(req,res)=>{
    // 自动生成主键并合并到请求数据
    const itemWithKey = {
        ...req.body,
        nineId: uuidv4()
    };
    const params = {
        TableName: dynamodbTableName,
        Item: itemWithKey
      }
    try {
        await dynamodb.put(params).promise();
        const body = {
          Operation: 'SAVE',
          Message: 'SUCCESS',
          Item: itemWithKey
        }
        res.json(body);
    } catch(error) {
        console.error('保存数据失败:', error);
        res.status(500).send(error);
    }
})

方案3:添加参数校验提前拦截错误

在处理DynamoDB请求前,先校验请求体是否包含nineId,提前返回错误提示:

router.post('/', async(req,res)=>{
    if (!req.body.nineId) {
        return res.status(400).send('请求参数缺失:必须包含nineId字段');
    }
    const params = {
        TableName: dynamodbTableName,
        Item: req.body
      }
    try {
        await dynamodb.put(params).promise();
        const body = {
          Operation: 'SAVE',
          Message: 'SUCCESS',
          Item: req.body
        }
        res.json(body);
    } catch(error) {
        console.error('保存数据失败:', error);
        res.status(500).send(error);
    }
})

额外优化

原代码同时使用await和.then()属于冗余写法,统一用try/catch处理异步错误,代码结构更清晰,上述修复方案已调整该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:25:28