Mongoose使用expressjs查找if语句错误

时间:2018-01-27 10:47:21

标签: 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 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文档..不工作 `

1 个答案:

答案 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来检查是否存在。