Javascript Mongoose使用expressjs查找搜索if语句错误
这是一个URL缩短器项目Javascript Mongoose使用expressjs查找搜索if语句错误,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,这是一个URL缩短器项目 app.get('/:url', (req,res) => { Url.find({userUrl:req.params.url},(err,doc)=>{ //finds if there is a link in the database if(err){ console.error(err) }else if(doc[0].userUrl==req.params.url) { // there is an error
app.get('/:url', (req,res) => {
Url.find({userUrl:req.params.url},(err,doc)=>{ //finds if there is a link in the database
if(err){
console.error(err)
}else if(doc[0].userUrl==req.params.url) { // there is an error in this line if a new link is passed in the params.url, or else if the link existed then there is no issue
console.log('hi')
}else { // if no link is not reaching?
const url = new Url({
userUrl:req.params.url
})
url.save();
}
})
}
如果我的数据库示例google.com中有一个链接,它确实会给我hi的输出,但当我放置其他链接时,它会在第一个else if语句中给我一个“property userUrl undefined”错误
我的模式是这样的:让urlschema=newschema{
userUrl:String,
短网址:{
类型:字符串,
“默认”:shortid.generate
}
}const Url=mongoose.model'Url',urlschema`
我想我需要用一种方式来写它,如果你在数据库中找不到它,那么就创建一个新的url文档。。不起作用
`主要问题是,只有在请求损坏或数据库连接不工作时,find才会抛出错误。如果没有找到数据,它将不会返回错误,而是返回一个空文档数组。如果您随后访问文档[0],它将返回undefined,undefined没有userUrl。一种可能的解决方案是检查文档数组是否有第一个文档:
Url.find({ userUrl: req.params.url }, (err, doc) => {
if(err){
return console.error(err);
if(doc[0]){
//Exists already
console.log(doc[0]);
} else {
//Doesnt exist yet, so create a new one:
const url = new Url({
userUrl: req.params.url
})
url.save();
}
});
请注意,您应该使用findOne检查是否存在。在访问ifdoc[0]或ifdoc.length之前,请先检查它。如果未显示任何结果,则返回的文档列表可能为空found@JonasW. 成功了!!我在第一个if语句中添加了doc.length&&