0

在 dynamoose 中使用 create 时出现错误,似乎是某个条件无效的错误,但由于我在创建中没有传递任何条件,而只传递了文档,因此没有理由发生。

"user strict";

const dynamoose = require("dynamoose");
require("./db");
const uuid = require('uuid'); 
const schema = new dynamoose.Schema(
{
  _id: {
  type:String,
  default: uuid.v1(),
  hashKey: true,
  
},
orderByLike: {
  type: String,
  default: 'order-desc',
  index: {
    name:'order-like-index',
    global:true,
    rangeKey: 'likes'

  }
},
'sessionId': {
  type: String,
  required: true,
  index: {
    name:"session-id-index",
    global:true,
    rangeKey: 'createdAt'
  }
},
videoUrl: {
  type: String,
  required: true,
},
videoName: {
  type: String,
  required: true,
  index: {
    name: 'video-name-index',
    global: true,
    rangeKey: 'createdAt'
  }
},
videoDescription: {
  type: String,
  required: true,
},
videoThumb: {
  type: String,
  required: true,
},
locked: {
  type: Boolean,
  default: false
},
thoseWhoLiked: {
  type: Array,
},
likes: {
  type: Number,
  default: 0,
},
deletedAt: {
  type: Date,
},
 },
 { timestamps: true,saveUnknown:true }
 );

 const connectDb = dynamoose.model("videosModel", schema);

创建文档

 async create({ videoName, sessionId, videoDescription, locked, videoThumb, videoUrl }) {
const video = await VideoModel.connectDb.create(
  {
    sessionId,
    videoName,
    videoThumb,
    videoDescription,
    videoUrl,
    locked
  }
);
return new IVideo({
  _id: video._id,
  sessionId: video.sessionId,
  videoName: video.videoName,
  videoDescription: video.videoDescription,
  videoUrl: video.videoUrl,
  videoThumb: video.videoThumb,
  locked: video.locked,
  thoseWhoLiked: video.thoseWhoLiked,
  likes: video.likes
});;

}

错误 :

{
"message": {
    "message": "The conditional request failed",
    "code": "ConditionalCheckFailedException",
    "time": "2022-01-29T17:16:22.985Z",
    "requestId": "PCVK6J7OTQN6RBLNEMD1DDLBMBVV4KQNSO5AEMVJF66Q9ASUAAJG",
    "statusCode": 400,
    "retryable": false,
    "retryDelay": 48.464798424454756
}

}

OBS:我在表中没有默认的 RangeKey/SortKey,只有 hashKey,在我将 createdAt 作为 rangeKey 的全局索引中,但它不是表的默认 rangeKey

另一个需要注意的是,离线运行 serverless 不会发生错误,只有在部署和测试之后

4

0 回答 0