node.js - Mongoose 保存在 if 语句的第二部分不起作用

标签 node.js mongodb express mongoose

我的 Node/Express API 中有一个函数,我首先检查“联系人”集合中是否存在“联系人”。如果是这样,我会进行更新。如果查询中的电子邮件不存在,那么我会创建一个新的。

如果联系人存在,则 contact.save() 有效。但如果联系人不存在,contact.save() 会生成一条错误消息,指出“contact.save() 不是函数。

我不明白我做错了什么。希望那里的人能够很容易地看到它并给我一些建议。

这是代码:

  // SEARCH IF CONTACT EXISTS IN SENDERS CONTACTS -  BY OWNERID AND EMAIL IN EMAILS
  Contact.findOne({'owner_id': req.body.owner_id, 'emails.email_address':req.body.invited_email}, function(err, contact){
    if(err)
      console.log('Error in looking for contact.');


    // IF A CONTACT EXISTS ---
    if(contact){

      console.log('--> CONTACT FOUND');

          // SET CONTACT SHARED INFORMATION
          contact.shared.invite_id = req.body.invited_first_name + req.body.invited_last_name + req.body.owner_id;
          contact.shared.profile_id = req.body.profile_id;
          contact.shared.first_name = req.body.first_name;
          contact.shared.company = req.body.company;
          contact.shared.title = req.body.title;
          contact.shared.last_name = req.body.last_name;
          contact.shared.initial = req.body.initial;
          contact.shared.linkedin = req.body.linkedin;
          contact.shared.google = req.body.google;
          contact.shared.facebook = req.body.facebook;
          contact.shared.pinterest = req.body.pinterest;
          contact.shared.twitter = req.body.twitter;
          contact.shared.emails = req.body.emails;
          contact.shared.phones = req.body.phones;
          contact.shared.addresses = req.body.addresses;
          contact.shared.link = req.body.invited_first_name + req.body.invited_last_name + req.body.owner_id;


          // ADD TO ALERT INFORMING SENDER THAT HE/SHE SHARED INFO
          alerts.genShare(req.body.owner_id, req.body.invited_first_name, req.body.invited_last_name, req.body.invited_email);

          // SAVE CONTACT INFORMATION
          contact.save(function(err){
            if(err)
              res.send(err);
            res.json(contact);
          });


          // IF INVITED IS NOT A USER - CREATE USER ACCOUNT
          if(!inviteIsUser){

            var phones = req.body.phones;
            var emails = req.body.emails;
            var addresses = req.body.addresses;

            var email = [{email_address:req.body.invited_email, email_type:'home'}];

            var share = {
              invite_id:req.body.invited_first_name + req.body.invited_last_name + req.body.owner_id,
              profile_id:req.body.profile_id,
              first_name:req.body.first_name, 
              last_name:req.body.last_name,
              initial:req.body.initial,
              birthday:req.body.birthday,
              highschool:req.body.highschool,
              college:req.body.college,
              facebook:req.body.facebook,
              linkedin:req.body.linkedin,
              google:req.body.google,
              pinterest:req.body.pinterest,
              user_image:req.body.user_image,
              emails:emails, 
              addresses:addresses, 
              phones:phones,
              shared:{}
            };

            var newContact = {
                emails: email,
                profile_id: req.body.profile_id,
                first_name: req.body.invited_first_name,
                last_name : req.body.invited_last_name,
                shared:share
            };

            //CREATE NEW USER AND ADD CONTACT FOR PERSON BEING SHARED WITH
            newUser = userCreate.genUser(req.body.invited_email, newContact);

          }


    } else {

      var contact = new Contact();

      //IF CONTACT EMAIL IS NOT FOUND, A NEW CONTACT IS CREATED
      console.log('Contact NOT found');

      var phones = req.body.phones;
      var emails = req.body.emails;
      var addresses = req.body.addresses;

      var email = [{email_address:req.body.invited_email, email_type:'home'}];

      var share = {
        invite_id:req.body.invited_first_name + req.body.invited_last_name + req.body.owner_id,
        profile_id:req.body.profile_id,
        first_name:req.body.first_name, 
        last_name:req.body.last_name,
        initial:req.body.initial,
        birthday:req.body.birthday,
        highschool:req.body.highschool,
        college:req.body.college,
        facebook:req.body.facebook,
        linkedin:req.body.linkedin,
        google:req.body.google,
        pinterest:req.body.pinterest,
        user_image:req.body.user_image,
        emails:emails, 
        addresses:addresses, 
        phones:phones,
        link:req.body.invited_first_name + req.body.invited_last_name + req.body.owner_id,
        shared:{}
      };


      contact = {
          emails: email,
          owner_id:req.body.owner_id,
          profile_id:req.body.profile_id,
          first_name: req.body.invited_first_name,
          last_name : req.body.invited_last_name,
          shared:share
      };

      console.log('Contact: ', contact);

      // SAVE CONTACT INFORMATION
      contact.save(function(err){
        if(err)
          res.send(err);
        res.json(contact);
      });



      // // IF INVITED IS NOT A USER - CREATE USER ACCOUNT
      // if(!inviteIsUser){
      //   newUser = userCreate.genUser(req.body.invited_email, contact);
      // }


      // ADD TO ALERT INFORMING SENDER THAT HE/SHE SHARED INFO
      alerts.genShare(req.body.owner_id, req.body.invited_first_name, req.body.invited_last_name, req.body.invited_email);

   }

})

最佳答案

您已使用对象重写了您的联系人:

contact = {
          emails: email,
          owner_id:req.body.owner_id,
          profile_id:req.body.profile_id,
          first_name: req.body.invited_first_name,
          last_name : req.body.invited_last_name,
          shared:share
      };

然后您尝试调用此处不存在的函数 save。

关于node.js - Mongoose 保存在 if 语句的第二部分不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46409320/

相关文章:

node.js - bot-framework v4 (node.js) 中的动态提示选择

node.js - npm 与 Node 版本号

mongodb - 关于 Redux 中的规范化

node.js - bat 文件 - 更改目录并在该目录中安装 npm,然后再次切换

javascript - 长时间运行的 Node REST API 需要很长时间才能响应

mongodb - Springdata MongoDB 自动在子文档中生成不需要的唯一索引

mongodb - 针对不同的排序过滤条件应该创建哪些MongoDB索引来提高性能?

javascript - 从本地主机调用 api 的生产环境

javascript - 从服务器获取数据时挂载钩子(Hook)(Promise/async)出错

node.js - 使用Nodejs发出POST请求时,如何获取请求负载的内容长度?