Soy nuevo en Mongoose y NodeJS y estoy creando un sistema de gestión de tickets en el que los usuarios registrados pueden completar un formulario para crear un ticket. Tiene dos campos (título y descripción), pero al enviarlo, también me gustaría agregar algunos datos del usuario al objeto de datos del formulario.
En la interfaz, estoy usando React con Formik para manejar el formulario. Mi objeto de datos de usuario se almacena en el almacenamiento local usando JWT.
Aquí están mis modelos actuales para el billete y para el usuario:
//ticket.model.js module.exports = (mongoose) => { const Ticket = mongoose.model( 'ticket', mongoose.Schema( { title: String, description: String, }, { timestamps: true } ) ); return Ticket; }; //user.model.js const User = mongoose.model( 'User', new mongoose.Schema({ firstName: String, lastName: String, email: String, password: String, roles: [ { type: mongoose.Schema.Types.ObjectId, ref: 'Role', }, ], }) ); module.exports = User;Aquí está la función Formik:
const formik = useFormik({ initialValues: { title: '', description: '', }, validationSchema, validateOnBlur: false, validateOnChange: false, onSubmit: (data) => { TicketService.create(data).then(() => { navigate('/home'); window.location.reload(); }); }, });Idealmente, cuando se crea el ticket, me gustaría consultar a Mongoose con el ObjectId del usuario para recuperar su nombre y apellido. Si es demasiado complicado, no me importa simplemente agregar los nombres de los usuarios a los datos del formulario usando JSON.parse(localStorage.getItem('user')). O si tiene mejores prácticas, hágamelo saber.
¡Gracias!
No importa, a mi objeto formik en realidad le faltaba el elemento de usuario (ver más abajo).
const formik = useFormik({ initialValues: { title: '', description: '', authorId: JSON.parse(localStorage.getItem('user')).id, authorName: `${JSON.parse(localStorage.getItem('user')).firstName} ${ JSON.parse(localStorage.getItem('user')).lastName }`, }, validationSchema, validateOnBlur: false, validateOnChange: false, onSubmit: (data) => { console.log(data); TicketService.create(data).then(() => { navigate('/home'); window.location.reload(); }); }, });A partir de ahí, actualicé mi modelo y controlador en consecuencia:
module.exports = (mongoose) => { const Ticket = mongoose.model( 'ticket', mongoose.Schema( { title: String, description: String, authorId: { type: mongoose.Schema.Types.ObjectId, ref: 'User', }, authorName: String, }, { timestamps: true } ) ); return Ticket; };