How to catch the error when inserting a MongoDB document which violates an unique index? How to catch the error when inserting a MongoDB document which violates an unique index? mongoose mongoose

How to catch the error when inserting a MongoDB document which violates an unique index?


You will need to test the error returned from the save method to see if it was thrown for a duplicative username.

app.post('/authenticate', function(req, res) {  var user = new User({    username: req.body.username  });  user.save(function(err) {    if (err) {      if (err.name === 'MongoError' && err.code === 11000) {        // Duplicate username        return res.status(422).send({ succes: false, message: 'User already exist!' });      }      // Some other error      return res.status(422).send(err);    }    res.json({      success: true    });  });})


You can also try out this nice package mongoose-unique-validator which makes error handling much easier, since you will get a Mongoose validation error when you attempt to violate a unique constraint, rather than an E11000 error from MongoDB:

var mongoose = require('mongoose');var uniqueValidator = require('mongoose-unique-validator');// Define your schema as normal.var userSchema = mongoose.Schema({    username: { type: String, required: true, unique: true }});// You can pass through a custom error message as part of the optional options argument:userSchema.plugin(uniqueValidator, { message: '{PATH} already exists!' });


Try this:

app.post('/authenticate', function(req, res) {        var user = new User({            username: req.body.username        });        user.save(function(err) {            if (err) {                // you could avoid http status if you want. I put error 500                 return res.status(500).send({                    success: false,                    message: 'User already exist!'                });            }            res.json({                success: true            });        });    })