Saturday, 20 May 2017

Catch error when using populate with mongoose

I have the next model and route with mongoose:

In my colection I have some invalids id's to cidade and this is why I am getting the error showing below.

The error happens In the line:

.populate('cidade')

Is there a way to execute my router in:

router.get('/:id',function(req,res,next){  .....

without stop on that error? If an invalid "id" is found, I´d just like to ignore it and proceed to next.

My collections is too big and can have some invalids "ids" to "cidade".

//error

angular.js:14328 Possibly unhandled rejection: {"data":{"message":"Cast to ObjectId failed for value \"Ararendá\" at path \"_id\" for model \"Cidade\"","name":"CastError","stringValue":"\"Ararendá\"","kind":"ObjectId","value":"Ararendá","path":"_id"},"status":500,"config":

//models and route

//cidade

cidadesSchema = new mongoose.Schema({
  uf: {type: String, unique:true},
  cidade: {type: String, unique:true}
});

module.exports = mongoose.model('Cidade', cidadesSchema,'cidades' );

//profiss

var profissionaisSchema = new mongoose.Schema({
  nome: {type: String, unique:true},
  cidade: {type:mongoose.Schema.Types.ObjectId, ref:'Cidade'},
  estado: {type:mongoose.Schema.Types.ObjectId, ref:'Estado'},
  cep: {type: String},
});

module.exports = mongoose.model('Profissional', profissionaisSchema,'profissionais' );

//route

const callback=function(err,data,res){
     if (err) return res.status(500).json(err);
     return res.status(200).send(data);
}   
router.get('/:id',function(req,res,next){   
    const query=req.params.id;
    Profissional.findById(query).populate('profissao')
    .populate('cidade')
    .exec( (err,data) => {
       callback(err,data,res)
    });
});



via Luiz Alves

No comments:

Post a Comment