2017-07-02 90 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

它的工作非常感谢你 –