#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 возвращает что-либо только в том случае, если уже существует элемент с тем же ключом раздела, который будет перезаписан вновь предоставленным элементом.