发送后无法设置headers。在节点中
Can't set headers after they are sent. in nodejs
I am not getting why error Can't set headers after they are sent. pops up.
Here is my error.
_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(options, callback).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);
}
帮助我的朋友们...我尝试了一切,但没有任何效果。
提前致谢
免责声明,我没有彻底检查您的代码,我发现的一个建议是,在理想情况下,您不要在一个函数中多次使用 "res.send" 或相关代码。当您尝试多次发送响应时,通常会抛出该错误。因此,为了安全起见,请尝试仅使用 res 一次,或最多两次(首先用于发送响应,其次用于抛出错误)
I am not getting why error Can't set headers after they are sent. pops up. Here is my error.
_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(options, callback).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);
}
帮助我的朋友们...我尝试了一切,但没有任何效果。 提前致谢
免责声明,我没有彻底检查您的代码,我发现的一个建议是,在理想情况下,您不要在一个函数中多次使用 "res.send" 或相关代码。当您尝试多次发送响应时,通常会抛出该错误。因此,为了安全起见,请尝试仅使用 res 一次,或最多两次(首先用于发送响应,其次用于抛出错误)