Estoy tratando de configurar una solicitud de parche para el punto final "/api/user?username=idHere". Está destinado a tomar un cuerpo json y ser capaz de leer cada par de valores clave y actualizar al usuario en MongoDB con esos nuevos valores. Sin embargo, en este momento, la línea "{$set: {key: req.body[key]}}" se interpreta literalmente y está tratando de establecer la palabra real "key" en un valor en lugar de la clave en el cuerpo de la solicitud. ¿Cómo puedo lograr este objetivo correctamente? Mi código actual para intentar esto está a continuación.
const updateUser = (req, res) => { const db = mongoConnection.getDb(); const keys = Object.keys(req.body); for (key in keys) { db.collection('users').updateOne( {username: req.query.username}, {$set: {key: req.body[key]}} ) } }JavaScript le permite usar nombres de clave parametrizados con llaves cuadradas.
// Will use the value of the "key" variable for the key { [key]: req.body[key] } // Will use the word "key" for the key { key: req.body[key] }Por ejemplo,
const req = { body: { name: "CobaltGecko", email: "cobalt@gmail.com" }}; const keys = Object.keys(req.body); for(let key in keys) { console.log({key: req.body[key]}); // logs {key: CobaltGecko}, {key: cobalt@gmail.com} } for(let key in keys) { console.log({[key]: req.body[key]}); // logs {name: CobaltGecko}, {email: cobalt@gmail.com} }