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

447
Views
await no funciona en el modelo mangosta .findOne({email : req.body.email})

Soy nuevo en express y mongodb ... Estoy tratando de usar la función user.findOne ({email}) devuelve al usuario con el correo electrónico con la palabra clave en espera, pero el nodo js arroja un error que dice

 let user = await User.findOne({ email: req.body.email }); ^^^^^

SyntaxError: await solo es válido en la función asíncrona

 const express = require('express'); const User = require("../models/user"); const {body, validationResult} = require("express-validator"); const router = express.Router(); // Listening the request at assigned route router.post('/', [ // Validation array body("name", "Enter name").isLength({ min: 5 }), body("email", "Enter valid email").isEmail(), body("password", "password must not be less than 5").isLength({ min: 5 }) ] , (req, res) => { // Errors in a single json... const errors = validationResult(req) // If there error return the error json... if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } // Check if there any user with same email... let user = await User.findOne({ email: req.body.email }); if (user) { return res.status(400).json({ error: "A user with this email already exist..."}); } // Create user... // user = await User.create({ // name : req.body.name, // email : req.body.email, // password : req.body.password // }) // res.json(user) res.send("Successful request...👍"); }) module.exports = router

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

dos problemas están aquí:

  1. si desea usar await , su devolución de llamada debe ser async :

    async () => { await ... }

  2. user en su código se refiere a promesas, no el valor de uso proviene de la promesa. para hacerlo necesitas ejecutar la consulta:

    let user = await User.findOne({ email: req.body.email }).exec();

también es mejor usar try catch para evitar que la aplicación se interrumpa por una mala solicitud.

considerándolo todo:

 async (req, res) => { // missing async const errors = validationResult(req) if (!errors.isEmpty()) { res.status(400).json({ errors: errors.array() }); // no need for return } try { let user = await User.findOne({ email: req.body.email}).exec(); // missing exec() if (user) { res.status(400).json({ error: "A user with this email already exist..."}); } res.send("Successful request...👍"); } catch (error) { console.log(error) } })
about 4 years ago · Juan Pablo Isaza Report

0

Haga que la función de devolución de llamada sea asíncrona usando la palabra clave

 async (req, res) => {}
about 4 years ago · Juan Pablo Isaza Report

0

Puede usar await solo en funciones asíncronas. Luego puede simplemente escribir: (req, res) => { like async (req, res) => { .

La otra forma sería no usar async (pero eso también funcionaría), es usar una función de devolución de llamada: User.findOne({ email: req.body.email }).then((user)=>{ /* Your logic here */})

En general, prefiero no mezclar asíncrono/devoluciones de llamada, así que me limito a usar solo asíncrono o solo uso de devolución de llamada :)

about 4 years ago · Juan Pablo Isaza 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!