How can create user in express.js using mongoose

Issue

I am trying to create a user in express.js using mongoose. I tried everything but i only get lastName and password i don’t know what happened. even in req.body.firstName also have data in but in newUser i only get two value lastName and password

let newUser = new User({
  firstName: req.body.firstName,
  lastName: req.body.lastName,
  email: req.body.email,
  password: req.body.password,
  phone: req.body.phone,
})

bcrypt.genSalt(10, (err, salt) => {
  bcrypt.hash(newUser.password, salt, (err, hash) => {
    if (err) {
      res.status(500).json({ error: err});
    } else{
      newUser.password = hash;
      newUser.save()
       .then(res => {
         res.status(200).json({ message: 'Successfullt created'   })
      })
      .catch((err) => {
        res.status(500).json({ error: err});
      })
   }
 })

})

Model

const mongoose = require('mongoose')
const { Schema } = mongoose

const userModel = new Schema({
   firtName: {
     type: String,
     required: true
   },
   lastName: {
     type: String,
     required: true
   },
   email: {
     type: String,
     required: true
   },
   password: {
     type: String,
     required: true
   },
   phone: {
     type: Number,
     required: true
   }

})

User = mongoose.model('User', userModel)
module.exports = User

Solution

This is a typo. firtName should be firstName in your model. Try this:

const userModel = new Schema({
   firstName: {
     type: String,
     required: true
   },
   ...
})

Edit:

Now it showing error " res.status is not a function ".

It’s showing that error because the .save() function does not return an object with .status function. It returns the saved document.

Try renaming

.save().then(res => { res.status(200)...

to

.save().then(savedDoc => { res.status(200)...

Answered By – Jeffrey Ram

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published