尽管我在nodejs服务器中使用了wait,但控件并没有等待



我正在构建一个应用程序,用户必须在其中使用OTP进行验证。我正在生成OTP,但无法将其发送给用户,因为即使我使用了等待,控件也没有等待

exports.generateOtp = async (req, res, next) => {
var phoneNumber = req.params.phonenumber;
var otp = otpGenerator.generate(6, { alphabets: false, upperCase: false, specialChars: false });
var data = '';
var generatedJson;
var url = "https://www.smsgatewayhub.com/api/mt/SendSMS?APIKey=myapikey&senderid=ID&channel=OTP&DCS=8&flashsms=0&number=" + phoneNumber + "&text= Your OTP for registration is " + otp + " Maltose Bio Innovations &route=31";
try {
var request = await https.get(url, function (result,) {
result.on('data', function (chunk) {
data += chunk;
});
result.on('end', async function () {
generatedJson = JSON.parse(data);
console.log(generatedJson.MessageData[0].MessageId);
const newOtp = new OTP({
code: otp,
messageId: generatedJson.MessageData[0].MessageId
})
newOtp.save();
})
}).on("error", (err) => {
console.log("Error: " + err.message);
});
await res.status(201).json({
message: 'OTP Generated',
messageId: generatedJson.MessageData[0].MessageId
});
} catch (err) {
next(err);
}
}

我可以发送短信,获取消息ID并将其保存在数据库中,但我无法发送相同的消息ID作为响应API

堆栈跟踪。

应用程序类型错误:无法读取未定义的属性"MessageData"2YHZ0FD9NU6RhrkHdpIKJA

来自URL的JSON响应是

{错误代码:"000",错误消息:"成功",JobId:'532',消息数据:[{编号:9191**09',消息ID:'IKjXq5FOzUmB2PvxeBvqoA',消息:"您的OTP注册号为378472 Maltose Bio Innovations"}]}

我想您使用的是"https"模块。方法https.get()不是异步的,因此不能"等待"其结果。因此,您可能需要使用promise来等待结果。我建议的第二件事是去掉var,改用letconst

exports.generateOtp = async (req, res, next) => {
const { phoneNumber } = req.params;
const otp = otpGenerator.generate(6, { alphabets: false, upperCase: false, specialChars: false });
let data = '';
let generatedJson;
const url = "https://www.smsgatewayhub.com/api/mt/SendSMS?APIKey=myapikey&senderid=ID&channel=OTP&DCS=8&flashsms=0&number=" + phoneNumber + "&text= Your OTP for registration is " + otp + " Maltose Bio Innovations &route=31";
const asyncGetData = () => {
return new Promise((resolve, reject) => {
https.get(url, (result) => {
result.on('data', function (chunk) {
data += chunk;
});
result.on('end', async function () {
generatedJson = JSON.parse(data);
console.log(generatedJson.MessageData[0].MessageId);
const newOtp = new OTP({
code: otp,
messageId: generatedJson.MessageData[0].MessageId
})
newOtp.save();
resolve(generatedJson);
})
}).on("error", (err) => {
console.log("Error: " + err.message);
reject(err);
});
});
}
try {
const response = await asyncGetData();
res.send(201, {
message: 'OTP Generated',
messageId: response.MessageData[0].MessageId
});
} catch (err) {
next(err);
}
}

最新更新