REST API: ПОМЕЩАЕМ, но не нужны все данные в json

#javascript #node.js #express

#javascript #node.js #выразить

Вопрос:

Это мой контроллер для обновления помещенных пользовательских данных. Контроллер принимает до 4 значений. Я хотел бы сделать так, если я отправлю только имя на этот маршрут, это изменит только имя, а остальное останется неизменным. (он не будет пустым). Возможно ли это сделать? Должен ли я делать это в redux-saga, т. Е. если он пуст, обновлять его

 // Update basic User's Data
exports.setUserdata = (req, res) => {
  const id = req.params.userId;
  User.update(
    {
      password: req.body.password,
      name: req.body.name,
      surname: req.body.surname,
      email: req.body.email,
    },
    { where: { id } },
  )
    .then(() => {
      res.status(200).json({ success: true });
    })
    .catch(() => {
      res.status(500).json({ error: 'Internal server error' });
    });
};
  

Комментарии:

1. какую базу данных вы используете?

2. @KyawKyawSoe, MySQL

3. пожалуйста, предоставьте более подробную информацию, например, о том, как вы реализовали User.update() , как будут выглядеть ваши входные ( params ) данные.

4. Вы сохранили пароль в виде обычного текста?!

5. @Marc, нет. У меня есть только имя и фамилия в хранилище Redux, ха-ха 🙂

Ответ №1:

Передайте параметры, которые вы хотите обновить, и не передавайте другие ключи.

Если req.body содержит только name ключ, вы можете просто выбрать эти 4 ключа из req.body .

 const updateParams = _.pick(req.body, ['name', 'password', 'surname', 'email'])
User.update(updateParams, {  where: { id } })
  

Если req.body есть другие свойства со значением null или undefined , вы можете отфильтровать их после выбора.

 const updateParams = _.chain(req.body).pick(['name', 'password', 'surname', 'email']).filter().value()
User.update(updateParams, {  where: { id } })
  

Конечно, это зависит от используемого вами ORM, но я полагаю, что большинство ORM не обновляют атрибуты, которые вообще не передаются.