En este momento, en mi API, si solo quiero actualizar un valor como email , otros valores se vuelven NULL y también tengo que volver a escribir todo lo demás solo para actualizar una cosa.
El objeto JSON es este:
{ "username": "batman" }Este será el resultado:
{ "message": "User Updated Successfully!", "user": { "user_id": 44, "name": null, "username": "batman", "email": null, "phone": null, "website": null } }Entonces, esto me obliga a escribir todo el objeto JSON para que otros valores no se actualicen a NULL:
{ "name": "batman", "username": "batman", "email": "batman@cave.com", "phone": "0123456789", "website": "batman.com" }Esta es la función de devolución de llamada para la solicitud PUT :
const updateUser = async (req, res) => { const id = parseInt(req.params.id); const { name, username, email, phone, website } = req.body; try { const update = await db.query("UPDATE users SET name = $1, username = $2, email = $3, phone = $4, website = $5 WHERE user_id = $6 RETURNING *", [ name, username, email, phone, website, id, ]); res .status(200) .json({ message: "User Updated Successfully!", user: update.rows[0] }); } catch (err) { console.error(err); res.status(500).json({ message: "Something Went Wrong!" }); } };¿Hay alguna forma de actualizar solo un valor sin que los demás se actualicen a NULL?
Logré resolver mi problema siguiendo las instrucciones de este artículo:
Actualización condicional en PostgreSQL
UPDATE users SET name = COALESCE (NULLIF($1, ''), name), username = COALESCE (NULLIF($2, ''), username), email = COALESCE (NULLIF($3, ''), email), phone = COALESCE (NULLIF($4, ''), phone), website = COALESCE (NULLIF($5, ''), website) WHERE user_id = $6 RETURNING *;