2017-07-02 43 views
1

我有這個功能sendsms節點JS twilio發送短信不工作

var twiml = new MessagingResponse(); 

function sendsms() { 
        twiml.message("aaa"); 
       console.log(twiml.toString()); 
        } 

但是當我打電話內User.findone

User.findOne({}, function(err, user) { 
       if (condition) { 
        sendsms(); 
       } 
      }) 

這種功能,它記錄了twiml.toString成功 enter image description here 但短信不發送 enter image description here 當我呼叫外部user.findOne短信發送成功

sendsms() 

這是路由發送短信

router.post('/sendSMS', function(req, res) { 
    var phone = req.body.phone; 



    User.findOne({}, function(err, user) { 


      require('../config/sendSMS')(user, phone); 

      res.status(200).json({ success: true, message: 'message sent successfully' }); 

     } 

    }); 

這是去這裏短信

router.post('/getSMS', function(req, res) { 

    require('../config/getAndReplay')(req, res); 

}); 
+0

你能分享更多的不工作的代碼嗎?當你說「我在User.findone裏面調用這個函數時,它不能工作」你怎麼調用它?你能展示代碼嗎? – philnash

+0

我的確感謝你 –

+0

我認爲這是一個明確的應用程序或類似的響應傳入請求的代碼。你能分享整個路線/行動嗎? – philnash

回答

1

Twilio開發商傳道的路線和重播。

代碼中的問題是您混合了同步代碼和異步代碼。

User.findOne是一個異步調用,因此在結果回調中調用getandreplay()函數將意味着它在響應在您的路由中完成後發生。

我建議您return您要從getandreplay()回覆的消息,並用它來形成對傳入請求的響應。就像這樣:

function getandreplay(node) { 
    if (node.outs.length > 0) { 
     if (node.outs.includes(req.body.Body.toLowerCase())) { 
      for (var i = 0; i < node.output.length; i++) { 
       var el = node.output[i]; 
       if (req.body.Body.toLowerCase() == el[0]) { 
        req.session.lastnode = getnode(el[1]); 
        if (getnode(el[1]).outs.length == 0) { 
         req.session.destroy(); 
         User.findOneAndUpdate({}, { $push: { users: userPhone } }, { safe: true, upsert: true }, function(user, err) {}); 
        } 
        return getnode(el[1]).msg; 
       } 
      } 
     } else { 
      return node.msg 
     } 
    } 
} 

然後,當你調用User.findOne()getandreplay()得到的結果,併發送回作爲響應:

User.findOne({}, function(err, user) { 
    if (!user.users.includes(userPhone)) { 
     twiml.message(getandreplay(mynode)); 
    } 
    res.writeHead(200, { 'Content-Type': 'text/xml' }); 
    res.end(twiml.toString()); 
}); 

請注意,我在這裏的回調函數中調用res.endUser.findOne()

讓我知道這是否有幫助。

+0

它的工作非常感謝你 –