2017-07-13 20 views
0

我有一個Node.js/Express.js項目。vCard.js不是第二個調用的函數

我有一個做了三件事端點: 1)它使用vCard.js生成一個.vcf文件 2)電子郵件的收件人.vcf文件 3)鏈接將其添加收件人作爲聯繫用戶配置文件

由於某種原因,當我第一次調用這個端點時,它處理一切都很好。但之後的任何調用都會產生vCard不是函數的錯誤。

下面是Express端點的簡化版本。我刪除了基本上實例化傳遞給函數的變量的代碼塊。

我希望有人能夠在流程中看到可能導致問題的原因。

我可以發佈整個代碼,但我認爲這可能有點麻煩人們通過,並認爲我會先試試這個。

這裏的端點:

var express = require('express'); 
var router = express.Router(); 
var Card = require('../models/cards'); 
var Hold = require('../models/hold'); 
var Profile = require('../models/profile'); 
var vCard = require('vcards-js'); 
var GuidGen = require('./helpers/generate_guid'); 
var sendmail = require('./helpers/post_office'); 
var constants = require('./helpers/constants'); 

router.route('/invite') 

.put(function(req, res){ 

    vCard = vCard(); 

    //VARIABLES PASSED TO VCARD HERE 

    // REMOVED FIELDS FOR VCARD FOR SIMPLICITY. HERE IS AN EXAMPLE OF A FIELD: vCard.[FIELD] = req.body.[PARAM]; 


    //FIRST ACTION: SAVE VCARD 
    vCard.saveToFile('./vcards/' + req.body.invited_first_name + req.body.invited_last_name + req.body.owner_id + '.vcf'); 


    //SECOND ACTION: SEND EMAIL WITH VCARD 

//FOLLOWING ACTION PASSES THE ABOVE PARAMS AND SENDS EMAIL VIA HELPER 
    sendmail.mailsend(emailSender, emailRecipient, emailSubject, emailBody); 


    //THIRD ACTION: SAVE CONTACT TO USER PROFILE 
    Profile.findOne({'contacts.emails.email_address':req.body.invited_email}, function(err, profile){ 
    if(err) 
     console.log('Error in looking for profile.'); 

    if(profile){ 

     //I REMOVED THE CODE BLOCK THAT SETS UP SAVING THE PROFILE FOR SIMPLICITY 

      profile.save(function(err){ 
      if(err) 
       res.send(err); 
      res.json(profile); 
      }); 

    } else { 


     //REMOVED CODE FOR SETTING UP UPDATING CONTACTS FOR SIMPLICITY 


     var contacts = { 
      //CODE FOR CONTATACTS REMOVED FOR SIMPLICITY 
     }; 

     Profile.findOneAndUpdate({ 
      owner_id: req.body.owner_id 
     }, { 
      $push: { 
       contacts: contacts 
      } 
     }, { 
      new: true 
     }, (err, profile) => { 
      if (err) { 
       return res.send(err); 
      } 
      return res.json(profile); 
     }); 

     } 

    }) 


}) 




module.exports = router; 

回答

1

這是因爲每一次。把被調用時,它引用了全球vCard參考。在第一行中,您將全局vCard設置爲vCard的功能執行 - 這就是您的錯誤。當您回到第二個put時,您引用了全球vCard,但這一次,它是一個對象,因爲您在第一次調用時將它設置爲這樣。

這有點令人困惑,讓我分解它。

  1. vCard是對模塊vcards-js的引用。
  2. vCard是一項功能。
  3. vCard是從vCard()返回的對象。
  4. 您試圖調用對象的函數調用,該對象從原始調用vCard返回。

在這種情況下,您應該重新命名名片到別的東西,或葫蘆您put方法之外的vCard新的聲明。

+0

謝謝,威爾遜! – cnak2

相關問題