[英]Node JS : Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
Beginner here.初学者在这里。 I understand that the below error message occurs when the api tries to set the response more than once.我知道当 api 尝试多次设置响应时会出现以下错误消息。 And i also realize the asynchronous characteristics of node js.而且我也实现了node js的异步特性。
But still i am unable to debug the issue.但我仍然无法调试问题。 Please help me out.请帮帮我。
router.route("/new").post((req, res) => {
//Variable declarations
sql.open(connectionString, function(err, conn){
var pm = conn.procedureMgr();
pm.callproc('dbo.AddRequestDetails',[request_zone,request_type,requester_type,request_flow,
sales_order,requester_email,quotation,request_reason,request_status,
StatusFlag, bot_status,bot_comments,additional_notification_to,additional_information, approver,
old_value,new_value,new_shipping_point,partner_name,text_type,text_type_action,table_data], function(err,results,output){
console.log("Hi");
if (err != null) {
console.log("error",err.message);
var user = req.ge('User');
var scriptName = path.basename(__filename);
var value = {err: err.message, user: user, scriptName:scriptName};
axios.post(configData.SERVER_URL + "/api/logToDB", value);
res.status(400).json(err.message);
} else {
console.log("Data successfully added in Main Table & Sub Table");
res.json("Data successfully added in Main Table & Sub Table");
}
});
});
});
module.exports = router;
And my output appears like below.我的输出如下所示。
Hi
Data successfully added in Main Table & Sub Table
POST /api/add/new 200 44.882 ms - 51
Hi
Data successfully added in Main Table & Sub Table
_http_outgoing.js:558
throw new ERR_HTTP_HEADERS_SENT('set');
^
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they
are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:558:11)
at ServerResponse.header (C:\Users\C572103\Documents\One
Order Change\OOC Portal\backend\node_modules\express\lib\response.js:767:10)
at ServerResponse.send (C:\Users\C572103\Documents\One Order Change\OOC Portal\backend\node_modules\express\lib\response.js:170:12)
at ServerResponse.json (C:\Users\C572103\Documents\One Order Change\OOC Portal\backend\node_modules\express\lib\response.js:267:15)
at C:\Users\C572103\Documents\One Order Change\OOC Portal\backend\routes\uploadData.js:58:13
at Object.callback (C:\Users\C572103\Documents\One Order
Change\OOC Portal\backend\node_modules\msnodesqlv8\lib\procedure.js:233:13)
at onProcedureRaw (C:\Users\C572103\Documents\One Order Change\OOC Portal\backend\node_modules\msnodesqlv8\lib\procedure.js:60:22)
at C:\Users\C572103\Documents\One Order Change\OOC Portal\backend\node_modules\msnodesqlv8\lib\reader.js:199:15
at onStatementComplete (C:\Users\C572103\Documents\One Order Change\OOC Portal\backend\node_modules\msnodesqlv8\lib\driver.js:185:11)
at Object.end (C:\Users\C572103\Documents\One Order Change\OOC Portal\backend\node_modules\msnodesqlv8\lib\driver.js:318:19) {
code: 'ERR_HTTP_HEADERS_SENT'
}
I am using msnodesqlv8 for sql operations我正在使用 msnodesqlv8 进行 sql 操作
似乎您要在发送响应后设置响应的标头(如 res.setHeader(400)),控制 if else 语句,似乎它在发送 200 后输入错误 else
It's very obvious from your code that Hi
is called twice.从您的代码中可以很明显地看出Hi
被调用了两次。 My guess is that you're opening a new sql connecting using sql.open
, but you never close it.我的猜测是您正在使用sql.open
打开一个新的 sql 连接,但您从未关闭它。 Even though you send the result to the response, the connection is still opened and some listeners might fire again, even though on another request.即使您将结果发送到响应,连接仍然打开并且一些侦听器可能会再次触发,即使是在另一个请求中。
Also check if in a single request pm.callproc
does only one thing and then does not fire two callbacks, because basically that's the real issue - you try to send two responses for the same request.还要检查在单个请求中pm.callproc
是否只做一件事,然后不触发两个回调,因为基本上这是真正的问题 - 您尝试为同一个请求发送两个响应。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.