在 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 不会发生错误,只有在部署和测试之后