0

我正在尝试在 dynamodb(使用 dynamoose)中创建记录。代码是

class Test {
  constructor() {
    this.table = dynamoose.model(tableName, tableSchema);
  }
//  userdata object - { 
//  cusotmerEmail: 'tushar.gaurav+testf40@accionlabs.com',
//  customerBusinessName: 'DoogleDnd',
//  customerFirstName: 'Tushar',
//  customerId: 101211,
//  customerLastName: 'Gaurav',
//  isDeleted: false,
//  sku: '100',
//  userId: '5c1776e94bea867c3f896236' 
// }


  async createUser(userData) {
    try {
      const res = await this.table.create(userData);
      console.log('Update user record - ', res);
      return res;
    } catch (error) {
      throw new Error(error);
    }
  }
}

* create 函数的输入值与我使用batchPut()尝试的相同输入是正确的,它正在工作。甚至更新对表的调用也有效。

async updateUser(userData) {
    try {
      const res = await this.table.update(userData);
      console.log('Updated user record - ', res);
      return res;
    } catch (error) {
      throw new Error(error);
    }
 }

这是我得到的错误 - 错误 - {"message":"The conditional request failed", "code":"ConditionalCheckFailedException", "statusCode":400}

这是调用函数 -

module.exports.subscribeUser = async (event) => {
  let inputBody = (typeof event.body === 'object' ? event.body : 
  JSON.parse(event.body));
  inputBody.userId = event.pathParameters.id;
  try {
    // Validate input
    await asisvc.validateInput(inputBody);

    inputBody = await UserSvc.constructUserObject(inputBody);
    console.log('Constructed object - ', JSON.stringify(inputBody));

    const userData = await testObj.createUser(inputBody);
    return Utils.buildResp(codes.ok, { userData }, {});
  } catch (error) {
    console.log(error);
    return Utils.buildResp(codes.badrequest, { Error: 
Utils.getErrString(error) }, {});

} };

我试着用谷歌搜索它,但没有找到任何合适的文件。提前致谢。

4

1 回答 1

0

Model.create在 Dynamoose 中,我们在使用该方法时默认检查表中是否已经存在主键。

所以你的错误:

{"message":"The conditional request failed", "code":"ConditionalCheckFailedException", "statusCode":400}

表示主键已经存在于表中。所以你正在尝试创建一个重复的项目。

文档中有一个 options 属性,您可以使用它来允许覆盖对象。

例如,以下代码将允许覆盖:

const res = await this.table.create(userData, {overwrite: true});
于 2018-12-17T21:28:22.733 回答