Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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 仅当数据不存在时才向数据库添加数据(节点js)_Javascript_Node.js_Mongodb_Express - Fatal编程技术网

Javascript 仅当数据不存在时才向数据库添加数据(节点js)

Javascript 仅当数据不存在时才向数据库添加数据(节点js),javascript,node.js,mongodb,express,Javascript,Node.js,Mongodb,Express,我试图向数据库中添加新数据,但前提是该数据尚未存在。我要求用户输入名称,如果名称已存在,则他/她无法输入相应的数据,并且会显示一个错误,显示为“已存在”。 这就是我所做的- app.post("/new",function(req,res){ Model.find({"name":req.body.name},function(err,persons){ if(err!=null) { req.flash("error","Already Exi

我试图向数据库中添加新数据,但前提是该数据尚未存在。我要求用户输入名称,如果名称已存在,则他/她无法输入相应的数据,并且会显示一个错误,显示为“已存在”。 这就是我所做的-

app.post("/new",function(req,res){
    Model.find({"name":req.body.name},function(err,persons){
         if(err!=null)
            { req.flash("error","Already Exists");
              res.redirect("/new");}
         if(err==null)
            { Model.create(req.body.person,function(err,newPerson){
                    if(err){console.log("Error");}
                    else{
                    newPerson.name=req.user.name;
                    newPerson.id=req.user._id;
                    newPerson.save();
                    res.redirect("/");}

            });}
    });

});
但是当我使用它时,即使我输入了已经存在的数据,它仍然会将其添加到数据库中。 Im使用express、node js和mongodb添加选项对象()


你为什么不试着用你的mongo模式字段

name: {
     // other rules
     unique: true 
},
在新创建时,它将在回调中生成
error
对象(如果已经存在)


这也将减少您的
find
数据库调用。

Model.find
未找到文档时,是否会设置
err
?这听起来有点违反直觉。你确定这是真的吗?我认为@mingosorry没有检查你的回调是正确的。您的err为null,但如果他发现一行,则不会发生大的数据库错误。所以只要删除你的if(err==null)我更新了我的答案对不起,但是它仍然会将数据添加到数据库中而没有任何错误你想让我删除创建部分吗?这会有什么帮助?@Harish请在你的答案中加入更多的代码,以便Ravi能够理解……我确实检查过了,我只是需要在模式中添加唯一的规则,对吗?我就是这么做的,但没用@Jonasw@RaviHooda你只需要Model.create()调用,然后错误显示已经存在…很高兴帮助你,干杯,伙计:)你能在这方面也帮忙吗,@RaviHooda也回答了那个:)
Model.findOne({"name":req.body.name},function(err,person){
    if(err){
        //err found
        res.send(err)
    }
    else if(person){
        // no error and also person exists
        req.flash("error","Already Exists");
        res.redirect("/new");
    }
    else{
        // no error and and person not found so create new one
        let newPerson = new Model({
            name : req.body.name,
            otherParams : req.body.otherParams 
        });
        newPerson.save(function(err){
            if(err){
                res.send('could not create new person');
            }
            else{
                res.send('person created successfully');

            }
        });
    }

});
Model.findOne({"name":req.body.name},function(err,person){
    if(err){
        //err found
        res.send(err)
    }
    else if(person){
        // no error and also person exists
        req.flash("error","Already Exists");
        res.redirect("/new");
    }
    else{
        // no error and and person not found so create new one
        let newPerson = new Model({
            name : req.body.name,
            otherParams : req.body.otherParams 
        });
        newPerson.save(function(err){
            if(err){
                res.send('could not create new person');
            }
            else{
                res.send('person created successfully');

            }
        });
    }

});