DynamoDb Обновить элемент из Node.js - PullRequest
1 голос
/ 12 октября 2019

У меня был следующий код, который изначально работал для создания пользователя.

var params = {
  TableName: 'myproject-user',
  Item: {
    id: req.body.userName,
    email: req.body.email
  }
};

if(req.body.currency) {
  params.Item.currency = {
    type: req.body.currency.type,
    bank: req.body.currency.bank,
    amount: req.body.currency.amount,
  }
}

docClient.put(params, function(err, data) {
  if (err) {
    res.send({
      success: false,
      message: 'Error: ' + err
    });
  } else {
    const { Items } = data;
    res.send({
      success: true,
      message: 'Added user',
      email: req.body.email
    });
  }
});

Сейчас я перехожу на put на update, так как хочу иметь возможность сохранять любые существующие значенияна объекте при обновлении электронной почты или имени. Кроме того, я добавил следующую строку в объект params, чтобы указать ключ id.

Key: { id : req.user.sub },

Код doc.update выполняется, и я получаю статус 200, как будтопроблем не было, но когда я смотрю на таблицу, информация не обновлялась.

Нужно ли использовать выражение или что-то, чтобы заставить update работать?

Код сизменения:

var params = {
  TableName: 'myproject-user',
  Key: {"id":req.user.sub},
  Item: {
    id: req.body.userName,
    email: req.body.email
  }
};

docClient.update(params, function(err, data) {
  if (err) {
    res.send({
      success: false,
      message: 'Error: ' + err
    });
  } else {
    const { Items } = data;
    res.send({
      success: true,
      message: 'Added user',
      email: req.body.email
    });
  }
});

1 Ответ

1 голос
/ 12 октября 2019

Я смог добиться этого, используя атрибуты UpdateExpression, ExpressionAttributeValues и ReturnValues вместо Item, как описано здесь :

var params = {
  TableName: 'krncdev-user',
  Key: {"id":req.user.sub},
  UpdateExpression: "set email=:e",
  ExpressionAttributeValues:{
      ":e": req.body.email
  },
  ReturnValues:"UPDATED_NEW"
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...