Неотвеченный запрос на обновление DynamoDB

#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. К сожалению, я не получаю никакой ошибки в качестве ответа; я получаю только пустой объект {}.