简体   繁体   English

节点JS:错误[ERR_HTTP_HEADERS_SENT]:发送到客户端后无法设置标头

[英]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.

相关问题 错误[ERR_HTTP_HEADERS_SENT]:将标头发送到Node JS中的客户端后,无法设置标头 - Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client in Node JS (节点:23)UnhandledPromiseRejectionWarning:错误[ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头 - (node:23) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client 错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头 - Node Express Mongodb - Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client - Node Express Mongodb Node.js Express.js Mongoose 错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头 - Node.js Express.js Mongoose Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client 错误 [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client error in node.js 项目 - Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client error in node.js project node js 错误 [ERR_HTTP_HEADERS_SENT]: 发送到客户端后无法设置标头并且控制台中没有 javascript 对象 - node js Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client and no javascript object in console 在 Express JS 中,[ERR_HTTP_HEADERS_SENT]:添加中间件后,无法在将标头发送到客户端后设置标头 - in Express JS , [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client , after adding a middleware 错误:[ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头,获取错误 - Error: [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client, fetch error 错误:错误 [ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头 - error: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client 错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头 -error - Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client -error
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM