#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 не обновляют атрибуты, которые вообще не передаются.