Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mongoose TypeError: User is not a constructor

I'm trying to add a subdocument to a parent schema with Mongoose and MongoDB however I'm being thrown the following error:

TypeError: User is not a constructor

This is based off Mongoose's documentation on subdocuments and I think everything is the same. How can I debug this further?

Router

// Add a destination to the DB
router.post('/add', function(req, res, next) {
  let airport = req.body.destination
  let month = req.body.month
  let id = (req.user.id)

  User.findById(id , function (err, User) {
    if (err) return handleError(err)

    function addToCart (airport, month, id) {
      var user = new User ({
        destinations: [(
          airport = '',
          month = ''
        )]
      })

      dog.destinations[0].airport = airport
      dog.destinations[0].month = month
      dog.save(callback)
      res.status(200).send('added')
    }
    addToCart()
  })
  console.log(airport)
})

Schema

var destinationSchema = new Schema({
  airport: String,
  month: String
})

// Define the scheme
var User = new Schema ({
  firstName: {
    type: String,
    index: true
  },
  lastName: {
    type: String,
    index: true
  },
  email: {
    type: String,
    index: true
  },
  homeAirport: {
    type: String,
    index: true
  },
  destinations: [destinationSchema]
})


User.plugin(passportLocalMongoose)

module.exports = mongoose.model('User', User)
like image 761
Rhys Edwards Avatar asked Nov 23 '16 22:11

Rhys Edwards


1 Answers

JavaScript is case sensitive about the variable names. You have User model and the User result with the same name.

Your code will work with the following change :

   User.findById(id , function (err, user) {
/*                                   ^ use small `u` */
       if (err) return handleError(err)

/* rest of your code */

Also keep in mind that further in your code you are declaring another variable named user. You will need to change that to something different.

like image 58
drinchev Avatar answered Nov 12 '22 07:11

drinchev