【问题标题】:Control is not waiting even though i have used the await in nodejs server即使我在 nodejs 服务器中使用了等待,控制也没有等待
【发布时间】:2021-07-02 16:52:30
【问题描述】:

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

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

我能够发送 SMS 并获取消息 ID 并将其保存在数据库中,但我无法发送与 API 中的响应相同的消息 ID

堆栈跟踪。

App TypeError:无法读取未定义的属性“MessageData” 2YHZ0FD9NU6RhrkHdpIKJA

来自 URL 的 JSON 响应是

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

【问题讨论】:

    标签: node.js https async-await


    【解决方案1】:

    我想您正在使用“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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-03-12
      • 2021-11-28
      • 2020-07-26
      • 1970-01-01
      • 2020-12-23
      • 1970-01-01
      • 1970-01-01
      • 2017-10-20
      • 1970-01-01
      相关资源
      最近更新 更多