DynamoDB DocumentClient не возвращает никаких данных после операции put

#node.js #typescript #amazon-web-services #amazon-dynamodb #serverless

Вопрос:

Я тестирую лямбду с помощью команды serverless framework with sls offline , эта лямбда должна подключиться к моему локальному DynamoDB (инициализированному с помощью образа docker-compose) и поместить новые данные в Динамо с помощью aws-sdk, но я никогда не смогу получить возврат put().promise() функции, если я использую get функцию, я тоже не получу никакого возврата .Я проверил, и данные вводятся в dynamodb. Следуйте приведенному ниже коду

 import ILocationData, { CreateLocationDTO } from '@domain/location/data/ILocationData'; import { LocationEntity } from '@domain/location/entities/LocationEntity'; import { uuid } from 'uuidv4';  import DynamoDBClient from './DynamoDBClient';  export default class LocationProvider extends DynamoDBClient implements ILocationData {  private tableName = 'Locations';   public async createLocation(data: CreateLocationDTO): Promiselt;LocationEntitygt; {  const toCreateLocation: LocationEntity = {  ...data,  locationId: uuid(),  hasOffers: false,  };   try {  const location = await this.client  .put({  TableName: this.tableName,  Item: toCreateLocation,  ReturnValues: 'ALL_OLD',  })  .promise();   console.log(location);   return location.Attributes as LocationEntity;  } catch (err) {  console.log(err);  return {} as LocationEntity;  }  } }  

DynamoDBClient.ts -gt; Файл класса

 import * as AWS from 'aws-sdk'; import { DocumentClient } from 'aws-sdk/clients/dynamodb';  abstract class DynamoDBClient {  public client: DocumentClient;  private config = {};   constructor() {  if (process.env.IS_OFFLINE) {  this.config = {  region: process.env.DYNAMO_DB_REGION,  accessKeyId: 'xxxx',  secretAccessKey: 'xxxx',  endpoint: process.env.DYNAMO_DB_ENDPOINT,  };  }   this.client = new AWS.DynamoDB.DocumentClient(this.config);  } }  export default DynamoDBClient;  

Ответ №1:

Я предполагаю, что идентификатор местоположения-это ваш ключ раздела, и вы назначаете его uuid() , который всегда будет уникальным, поэтому вы никогда не будете обновлять существующие элементы с помощью операции put. Операция Put возвращает что-либо только в том случае, если уже существует элемент с тем же ключом раздела, который будет перезаписан вновь предоставленным элементом.