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

446
Views
await not working on mongoose model .findOne({email : req.body.email})

I am new to express and mongodb... I am trying to use user.findOne({email}) function returns the user with email with await keyword but the node js throws error saying

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

SyntaxError: await is only valid in async function

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

two problems are here:

  1. if you want to use await your callback should be async:

    async () => { await ... }

  2. user in your code is referring to promises not use value came from promise. to do so you need to execute the query:

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

it is also better to use try catch to avoid your application breaks on bad request.

all in all:

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

Make the callback function asynchronous by using keyword

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

0

You can use await only in async functions. You can then just write: (req, res) => { like async (req, res) => {.

The other way would be to not use async (but that'd work too), is to use a callback function: User.findOne({ email: req.body.email }).then((user)=>{ /* Your logic here */})

In general, I prefer to not mix up async/callbacks, so I stick to only use async or only use callbacks :)

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!