Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongoose使用expressjs查找搜索if语句错误_Javascript_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Javascript Mongoose使用expressjs查找搜索if语句错误

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

这是一个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的输出,但当我放置其他链接时,它会在第一个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&&