Estoy tratando de configurar la representación condicional usando en el backend para permitir que un usuario actualice su perfil. Mi primer pensamiento fue usar una declaración de cambio, ya que es caso por caso lo que quieren actualizar (nombre de usuario, ubicación, etc.), sin embargo, no puedo hacer que la validación funcione caso por caso. ¿Hay una forma más eficiente de hacer esto sin usar ReactJS? A continuación se muestra el código y el registro de errores. Eliminé la cláusula de "interrupción" para que el interruptor continúe verificando un valor real. También probé ".trim().length" como parte de la validación, pero el error de validación que publiqué sigue apareciendo también.
perfil.js
router.post("/update/:id", (req, res) => { console.log("UPDATING ROUTE HIT \n"); try { console.log("MADE IT INSIDE THE TRY ROUTE \n"); if (req.isAuthenticated()) { User.findOne({ id: req.params.id }, (err, foundUser) => { if (foundUser) { console.log("FOUND USER \n"); const newUpdate = { username: req.body.username, company: req.body.company, location: req.body.location, position: req.body.position, }; switch (true) { // THIS IS THE PROBLEM case newUpdate.username !== "" && newUpdate.username !== User.find({ username: { $ne: null } }): foundUser.username = newUpdate["username"]; case newUpdate.company !== "" && newUpdate.company.length >= 3: foundUser.company = newUpdate["company"]; case newUpdate.location !== "" && newUpdate.location.length >= 3: foundUser.location = newUpdate["location"]; case newUpdate.position !== "" && newUpdate.position.length >= 3: foundUser.position = newUpdate["position"]; break; default: console.log("FAILED TO ENTER ANYTHING" + err + "\n"); break; } foundUser.save((err) => { if (err) { console.log("THERE WAS AN ERROR: " + err + "\n"); } else { console.log("SUCCESSFULLY CHANGED POSITION"); } }); res.redirect("/profile"); } else { console.log("FOUND THE ANSWER" + err + "\n"); } }); } } catch (error) { console.log("THERE WAS AN ERROR(caught): " + error + "\n"); } });Como ya estaba usando una sentencia switch y es O(n), decidí usar un bucle while y configurar el condicionamiento en torno a los mismos principios que estaba buscando en la sentencia switch, y luego salí del bucle. Todo funcionó bien. Esto es lo que hice a continuación.
Perfil.js
while (newUpdate) { if ( newUpdate.username.trim().length >= 3 && newUpdate.username !== User.find({ username: { $ne: null } }) ) { foundUser.username = newUpdate["username"]; } if (newUpdate.company.trim().length >= 3) { foundUser.company = newUpdate["company"]; } if (newUpdate.location.trim().length >= 3) { foundUser.location = newUpdate["location"]; } if (newUpdate.position.trim().length >= 3) { foundUser.position = newUpdate["position"]; } foundUser.save((err) => { if (err) { console.log(err); } }); break; }También arreglé el problema principal. Al hacer esto, pude obtener el uso de ".trim().length y establecer la condición en consecuencia. Al principio no sabía que las etiquetas de entrada siempre devuelven una cadena vacía durante la validación y que su propiedad heredada es equivalente a 0. Por lo tanto, pude establecer una condición para que se volviera falso y pasar a la siguiente función, razón por la cual quería usar el interruptor en primer lugar.