节点JS twilio发送短信不工作
问题描述:
我有这个功能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成功 但短信不发送
当我呼叫外部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开发商传道的路线和重播。
代码中的问题是您混合了同步代码和异步代码。
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.end
为User.findOne()
。
让我知道这是否有帮助。
+0
它的工作非常感谢你 –
你能分享更多的不工作的代码吗?当你说“我在User.findone里面调用这个函数时,它不能工作”你怎么调用它?你能展示代码吗? – philnash
我的确感谢你 –
我认为这是一个明确的应用程序或类似的响应传入请求的代码。你能分享整个路线/行动吗? – philnash