Без сервера: DynamodB выдает ошибку при создании записи при попытке с async / await - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь создать запись в 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);
    }
  }
}

* входные значения для функции создания верны, как и тот же ввод, который я пробовал с 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": "Условный запрос не выполнен", "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) }, {});

}};

Я пытался найти ее в Google, но не сделалНе могу найти подходящий документ.Заранее спасибо.

1 Ответ

0 голосов
/ 18 декабря 2018

В Dynamoose по умолчанию мы проверяем, существует ли первичный ключ в таблице при использовании метода Model.create.

Итак, ваша ошибка:

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

Указывает, чтоПервичный ключ уже существует в таблице.Итак, вы пытаетесь создать дубликат элемента.

В документации есть свойство options, которое вы можете использовать, чтобы разрешить переопределение объекта.

Например, следующеекод позволит переопределять:

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