DynamoDB 文档客户端在放置操作后不会返回任何数据



我正在使用带有sls offline命令的serverless framework测试一个 lambda,这个 lambda 应该连接到我的本地 dynamoDB(使用 docker-compose 映像初始化),并使用 aws-sdk 将新数据放入 Dynamo,但我永远无法获得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): Promise<LocationEntity> {
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 -> 类文件

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;

我假设 locationId 是您的分区键,您将其分配给始终唯一的uuid(),因此您永远不会使用放置操作更新任何现有项目。仅当已存在具有相同分区键的现有项将被新提供的项目覆盖时,放置操作才会返回任何内容。

最新更新