TAREA DE CÓDIGO: PARA GUARDAR DATOS DE USUARIO EN DB COMO ESTAMOS REGISTRANDO EL NUEVO USUARIO EN LA APLICACIÓN.
PROBLEMA: LOS DATOS SE ESTÁN GUARDANDO PERO OBTENIENDO "400 SOLICITUD INCORRECTA" Y ERROR EN LA CONSOLA
ERROR: "No se puede guardar () el mismo documento varias veces en paralelo"
CÓDIGO (GENERAR TOKEN JWT Y GUARDAR EN LA BASE DE DATOS)
userSchema.methods.generateAuthToken=async function(){ const user=this; // console.log(user); const token=jwt.sign({_id:user._id.toString()},'helloworld'); user.tokens=user.tokens.concat({token}); await user.save(); return token; }CÓDIGO (ARCHIVO ENRUTADOR)
router.post('/users',async(req,res)=>{ const user=new User(req.body); const token=user.generateAuthToken(); try{ await user.save(); res.status(201).send({user,token}); } catch(err){ console.log(err); res.status(400).send(err); } // console.log(req.body); })El problema ocurre cuando agrego la línea "const token" y "res.status(201).send({user,token});"
Su error es bastante obvio. Solo tienes que leer los mensajes de error:
ERROR: "No se puede guardar () el mismo documento varias veces en paralelo"
La cuestión es que user.generateAuthToken() es una tarea asíncrona que incluye await user.save()
Tienes que esperarlo también:
const token = await user.generateAuthToken(); Tal vez elimine uno de los user.save() . Supongo que no es la mejor idea guardar al usuario dos veces por solicitud.