#javascript #api #express #aws-lambda #amazon-dynamodb
#javascript #API #экспресс #aws-lambda #amazon-dynamodb
Вопрос:
Я пытаюсь выполнить обновление в таблице DynamoDB, но по какой-то причине, несмотря на правильную запись запроса (параметров), в результате я получаю пустой объект.
Проект построен в Express с использованием шаблона проектирования MVVM, аналогичного тому, который обычно используется в Sprint.
Важно отметить, что всякий раз, когда я выполняю обновление через «controller — service — repository» в одном состоянии, а не в массиве, оно работает. С другой стороны, когда я выполняю процесс через «controller — service — service — repository», выполнение завершается с ошибкой. Я предполагаю, что это проблема с синхронизацией, но я не совсем уверен, где именно.
Путь к каталогу:
├───Handler.js
│ ├───Controller
│ ├───exampleController.js
│ └───Service
│ ├───exampleService.js
│ ├───singleUpdateService.js
│ └───Repository
│ ├───exampleRepository.js
Пример использования Postman:
{
"id": "21313",
"text": "text string",
"arrayData": [true]
}
Handler.js пример кода:
...
app.use('/api/example', exampleController);
...
exampleController.js пример кода:
...router and express import
router.post('/example', async (req, res) => {
res.send(await exampleService.updateExample(req));
});
..
exampleService.js пример кода:
Эта функция получает массив логических состояний, и эти состояния должны быть вставлены в базу данных, использующую функцию другого уровня обслуживания.
контроллер — сервис — сервис — репозиторий
...
exports.updateExample = (req) => {
const { id, text, arrayData } = JSON.parse(req.body.toString('utf8'))
//the singleState value is taken from arrayData using a .map
// mapping function is commented as the values are explicitly passed as arguments
//...arrayData.map( singleState =>{
return singleUpdateService.singleUpdateExample(id, text, singleState); //singleState = arrayData[0]
//...});
};
...
singleUpdateService.js пример кода:
...
exports.singleUpdateExample= (id, text, state) => {
const params = {
TableName: 'table',
Key: {
'id': { 'S': id },
'text': text
},
UpdateExpression: 'set state = :state',
ConditionExpression: 'text = :text',
ExpressionAttributeValues: {
':state': state,
':text': text
},
ReturnValues: "UPDATED_NEW"
};
return exampleRepository.update(params);
}
...
exampleRepository.js пример кода:
const aws = require('aws-sdk');
const docClientUpd = new aws.DynamoDB.DocumentClient();
exports.update = (params) => {
return docClientUpd.update(params, async (err, result) => {
if (err)
return err;
return resu<
}).promise();
}
Спасибо за вашу поддержку.
Комментарии:
1. Вы получаете сообщение об ошибке, которое также может быть опубликовано?
2. К сожалению, я не получаю никакой ошибки в качестве ответа; я получаю только пустой объект {}.