我有下一个模型和路线与mongoose:
在我的收集中,我有一些invalids id到“cidade”字段,这就是为什么我收到下面显示的错误。
错误发生在以下行中:
.populate('cidade')
有没有办法在:
执行我的路由器(代码如下)router.get('/:id',function(req,res,next){ .....
不停止该错误? 如果找到无效的“id”,我只想忽略它并继续下一步。
我的收藏品太大,可能会有一些残疾人“ids”到“cidade”字段。
//错误
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":
//模型和路线
// 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' );
//路线
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)
});
});
答案 0 :(得分:2)
我不认为你可以告诉Mongoose只是忽略那些和继续前进的错误,所以你必须自己实现这个人群(这应该相对容易因为您使用的findById
最多只会产生一个文档。
这里有一些(未经测试的)代码:
Profissional.findById(query).populate('profissao').exec( (err, profi) => {
if (err) {
return res.status(500).json(err);
} else if (! profi || ! /^[a-f0-9]{24}$/i.test(profi.cidade)) {
return res.status(200).send(profi);
}
Cidade.findById(profi.cidade).exec((err, cidade) => {
if (err) {
return res.status(500).json(err);
}
profi.cidade = cidade;
return res.status(200).send(profi);
});
});
如果cidade
属性看起来像一个有效的ObjectId,它将运行一个查询来检索它,否则它不会打扰。