我有猫鼬的下一个模型和路线:
在我的集合中,我有一些无效的 ID 到“cidade”字段,这就是为什么我收到下面显示的错误。
错误发生在这一行:
.populate('cidade')
有没有办法在以下位置执行我的路由器(代码如下):
router.get('/:id',function(req,res,next){ .....
没有停止那个错误?如果发现无效的“id”,我只想忽略它并继续下一步。
我的收藏太大,可能有一些无效的“id”到“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":
//模型和路由
//城市
cidadesSchema = new mongoose.Schema({
uf: {type: String, unique:true},
cidade: {type: String, unique:true}
});
module.exports = mongoose.model('Cidade', cidadesSchema,'cidades' );
//专业的
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)
});
});
我不认为你可以告诉 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,它将运行一个查询来检索它,否则它不会打扰。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句