简体   繁体   中英

REST API: PUT but no need all data in json

This is my controller to update put user data. The controller accepts up to 4 values. I would like to do so if I send only a name to this route, This will change only the name and the rest will remain unchanged. (it will not be empty). Is it possible to do this? Do I have to do it in redux-saga, ie if it is empty, give it up-to-date

// 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' });
    });
};

Pass params you want to update and don't pass other keys.

If req.body contains only name key, you can just pick up those 4 keys from req.body .

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

If req.body has other properties with value null or undefined , you can filter them after picking.

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

Of course it depends on the ORM you are using but I believe most ORM don't update attributes which are not passed at all.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM