节点js twilio发送短信不起作用

我有这个函数sendms

var twiml = new MessagingResponse(); function sendsms() { twiml.message("aaa"); console.log(twiml.toString()); } 

但是当我在User.findone中调用这个函数

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

它成功地logging了twiml.toString 在这里输入图像说明 但短信不发送 在这里输入图像说明 当我呼叫外部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); }); 

       

网上收集的解决方案 "节点js twilio发送短信不起作用"

Twilio开发者在这里传道。

你的代码中的问题是你混合了同步代码和asynchronous代码。

User.findOne是一个asynchronous调用,因此在结果callback中调用getandreplay()函数将意味着在路由中的响应完成后发生。

我build议你从getandreplay() return你想要回复的消息,并用它来形成对传入请求的响应。 喜欢这个:

 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()); }); 

请注意,在这里我调用了User.findOne()的callback函数中的User.findOne()

让我知道这是否有帮助。