Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

380
Views
¿Cómo deconstruir rutas/usuarios y publicaciones protegidas en el mismo método .create() en mongoose/js?

Me pregunto cómo usar el método .create() con una ruta protegida mientras uso JavaScript deconstruido. Sin la ruta protegida, puedo deconstruir mi esquema y usar req.body en .create(...) como se muestra a continuación.

 const { title, year, producer, director, licenseStart, licenseEnd, platform, requestorName, requestorEmail, requestorDepartment, price, notes } = req.body

Sin deconstruirlo, puedo hacerlo funcionar en .create() y .save() pero tiene 14-15 líneas y no se siente como la mejor práctica. Vea abajo.

 const newPurchase = new Purchase({ user: req.user.id, title: req.body.title, year: req.body.year, producer: req.body.producer, director: req.body.director, licenseStart: req.body.licenseStart, licenseEnd: req.body.licenseEnd, platform: req.body.platform, requestorName: req.body.requestorName, requestorEmail: req.body.requestorEmail, requestorDepartment: req.body.requestorDepartment, price: req.body.price, notes: req.body.notes }); const savedPurchase = await newPurchase.save();

Mi problema es... ¿cómo diablos se deconstruyen las propiedades user:req.user.id y req.body y se usan ambas en el mismo método .create() ? .create(req.body) funciona, pero .create(req.body, { user: req.user.id }) no. He probado varias otras variaciones también.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Hola, no estoy muy seguro de lo que quieres decir con hacer que esto funcione:

 .create(req.body, { user: req.user.id })

Pero normalmente uso .create() así:

 async function createUser(req, res) { const { firstName, lastName, gender, profilePicture, email, password } = req.body; try { const schema = object().keys({ firstName: string().required(), lastName: string().required(), gender: string().optional(), profilePicture: string().optional(), email: string().required(), password: string().required(), }); const validation = validate(req.body, schema); if (validation.error !== null) throw new Error(validation.error.details[0].message); const user = await User.findOne({ email }); if (user) { res.status(400).json({ success: false, message: "Email Already Exist" }); return; } const data = await User.create({ firstName, lastName, gender, profilePicture, email, password, lastLogin: new Date(), }); const newUser = await User.findById(data._id); res.json({ success: true, message: "user details", data: newUser, }); } catch (error) { console.error(error); res.json({ success: false, message: "user not found", error }); } }

Espera que esto ayude

over 4 years ago · Santiago Trujillo Report

0

Descubrí la respuesta a mi propia pregunta. Pensé que había intentado esto antes, pero funcionó esta vez.

 const setPurchases = asyncHandler(async (req, res) => { const {title, year, producer, director, licenseStart, licenseEnd, platform, requestorName, requestorEmail, requestorDepartment, price, notes} = req.body if (!title || !year || !producer || !director || !licenseStart || !licenseEnd|| !platform || !requestorName || !requestorEmail || !requestorDepartment || !price || !notes){ res.status(400) throw new Error('Please fill in all the fields') } **const purchase = await Purchase.create(Object.assign({user:req.user.id}, req.body));**

Esto me permitió deconstruir el objeto Esquema de compra y usarlo tanto como el objeto de usuario en el método create(). Esto es mucho más limpio que el siguiente código y tiene usuario: req.user.id más 12 objetos req.body como title: req.body.title, name: req.body.name, year: year.req.body.year , productor... etc en el método .create(). El código de arriba es mucho más limpio que el de abajo y lo que he estado buscando. Espero que ayude a cualquier otra persona que tenga el mismo problema o a un novato como yo. También tenga en cuenta que también funciona con .save(), aunque un poco diferente como se muestra en mi pregunta original.

 const setPurchases = asyncHandler(async (req, res) => { if (!title || !year || !producer || !director || !licenseStart || !licenseEnd|| !platform || !requestorName || !requestorEmail || !requestorDepartment || !price || !notes){ res.status(400) throw new Error('Please fill in all the fields') } const purchase = await Purchase.create({ title: req.body.title, year: req.body.year, producer: req.body.producer, director: req.body.director, licenseStart: req.body.licenseStart, licenseEnd: req.body.licenseEnd, platform: req.body.platform, requestorName: req.body.requestorName, requestorEmail: req.body.requestorEmail, requestorDepartment: req.body.requestorDepartment, price: req.body.price, notes: req.body.notes})
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!