节点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); });
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()
。
让我知道这是否有帮助。