I have an update request with variable quantity of fields. Is there a better way to do this? Now my code is look like so:
router.put('/:id', authenticateToken, async (req,res)=>{
try {
console.log(req.method,req.originalUrl)
process.env.DEBUG && console.log('req.body', req.body)
let keys = Object.keys(req.body), fields='', numbers='', values=[]
keys.forEach((key, index) => {
if (key !== 'id') {
fields+= key
fields+= (index === keys.length-1) ? '':','
numbers+= `$${index+1}`,
numbers+= (index === keys.length-1) ? '':','
}
values.push(req.body[`${key}`])
})
let data = null
if (keys.length !== 2)
data = await pool.query(`UPDATE users SET (${fields}) = (${numbers}) WHERE id=($1) RETURNING *`, values)
else // if only one field to update
data = await pool.query(`UPDATE users SET ${fields} = ${numbers} WHERE id=($1) RETURNING *`, values)
process.env.DEBUG && console.log('data',data.rows[0])
res.json(data.rows[0])
} catch (error) {
res.status(500).json({error: error.message})
}
})