代码之家  ›  专栏  ›  技术社区  ›  krishna amarghade

发送邮件头后无法设置邮件头。在Nodejs

  •  0
  • krishna amarghade  · 技术社区  · 7 年前

    我不明白为什么会出错 发送邮件头后无法设置邮件头。 弹出。 这是我的错误。

       _http_outgoing.js:494
            throw new Error('Can\'t set headers after they are sent.');
            ^
    
    Error: Can't set headers after they are sent.
        at validateHeader (_http_outgoing.js:494:11)
        at ServerResponse.setHeader (_http_outgoing.js:501:3)
        at ServerResponse.header (D:\trraks\node_modules\express\lib\response.js:767:10)
        at ServerResponse.send (D:\trraks\node_modules\express\lib\response.js:170:12)
        at ServerResponse.json (D:\trraks\node_modules\express\lib\response.js:267:15)
        at IncomingMessage.<anonymous> (D:\trraks\app\routes\api.js:58:17)
        at emitOne (events.js:116:13)
        at IncomingMessage.emit (events.js:211:7)
        at IncomingMessage.Readable.read (_stream_readable.js:475:10)
        at flow (_stream_readable.js:846:34)
        at resume_ (_stream_readable.js:828:3)
        at _combinedTickCallback (internal/process/next_tick.js:138:11)
        at process._tickCallback (internal/process/next_tick.js:180:9)
    

    我想通过用户手机号码发送OTP。这是所有声明。

    var code = user.CODE;
    var msg =urlencode("Dear User,\nVerify your mobile number.\nYour verification code is "+ code);
    var number=user.MOBILENO;
    var data ='username='+username+'&hash='+hash+'&sender='+sender+'&numbers='+number+'&message='+msg
                    var options = {
                    host: 'api.textlocal.in',
                    path: '/send?'+data
                    };
    
                        callback = function(response) 
                        {
    
                              response.on('data', function (chunk) 
                              {
                                    res.json({ success: true, messege: "Messege send on given number"});
    
                              });
    
                        }
    

    在第一次运行代码之后,一切都正常工作,但第二次,它显示了上述错误。

    http.request(选项,回调).end();

    上面的一行发送消息。

    Verifyotp.GetMobileNumber(user.MOBILENO,function(err,mobexits){
                                if (!mobexits) {
                                    // new number with new OTP
                                        user.save(function(err){
                                        if(err){
                                            // console.log(err);
                                            res.json({success:false, messege:"Something went wrong while trying to send otp"});
                                        }else{
    
                                            res.json({success:true, messege: "OTP sent on given mobile number new"});
                                            http.request(options, callback).end();
                                        }
                                    })
                                }else{
                                    // updating new OTP on old number
                                    Verifyotp.UpdateOtp(user.MOBILENO,user.CODE,function(err,update){
                                        if (!update) {
                                            res.json({success:false, messege: "something went wrong while sending OTP"})
                                        }else{
                                            res.json({success:true, messege: "OTP sent on given mobile number updated"});
                                            http.request(options, callback).end();
    
                                        }
                                    });
    
                                }
                            });
    

    这是我的MongooseSchema:

    var User =  module.exports = mongoose.model('verifydata',UserSchema);
    
    module.exports.GetMobileNumber = function(mobileno,callback){
        const query={MOBILENO:mobileno};
        User.findOne(query,callback);
    }
    
    module.exports.UpdateOtp = function(mobilenumber,code,callback){
        const query = {MOBILENO: mobilenumber};
    User.findOneAndUpdate(query, { CODE: code }, callback);
    }
    

    帮助我的朋友…我什么都试过了,但没用。 谢谢。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Sachin S    7 年前

    免责声明,我没有彻底检查您的代码,我发现的一个建议是,在理想情况下,您在一个函数中不使用“res.send”或相关的多次。当您尝试多次发送响应时,通常会抛出错误。因此,为了更安全起见,尝试只使用一次Res,或最多使用两次(第一次用于发送响应,第二次用于抛出错误)

    推荐文章