无服务器:dynamodb在尝试使用异步/等待时产生创建记录错误

时间:2018-12-17 16:09:39

标签: node.js async-await aws-lambda amazon-dynamodb dynamoose

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

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”:“条件请求失败”,“代码”:“ 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) }, {});

} };

我尝试使用Google搜索,但是没有找到任何合适的文档。 预先感谢。

1 个答案:

答案 0 :(得分:0)

默认情况下,在Dynamoose中,使用Model.create方法检查表中是否已存在主键。

所以你的错误:

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

指示表中已经存在主键。因此,您正在尝试创建重复项。

documentation中,有一个options属性,可用于允许覆盖该对象。

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

const res = await this.table.create(userData, {overwrite: true});