这是一个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 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,但是当我输入其他链接时它给了我一个属性userUrl undefined'第一个else if语句中的错误。
我的架构就像这个let urlsSchema = new Schema({
userUrl:String,
shortUrl: {
type: String,
'default': shortid.generate
}
})
const Url = mongoose.model(' urls',urlsSchema);`
我想我需要以一种方式编写它,如果你无法在数据库中找到它,那么创建一个新的url文档..不工作 `
答案 0 :(得分:1)
主要问题是find
仅在请求损坏或数据库连接不起作用时才会抛出错误。如果未找到数据,则不会返回错误,而是返回空doc
数组。如果您随后访问doc[0]
,它将返回undefined,undefined没有userUrl
。一种可能的解决方案是检查doc数组是否有第一个文档:
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
来检查是否存在。