не удается установить заголовки после их отправки return res.json

#mysql #node.js #api

#mysql #node.js #API

Вопрос:

 exports.saveUserInterfaceConfig = function(req,res){
  var body = req.body;
  console.log('body:[' JSON.stringify(body) ']');
  var mysql = require('mysql');
  var UiConfigId = [];
  var connection = getDBConnection();
  if(body amp;amp; connection){
    connection.beginTransaction(function(err){
      if (err) {
        /*var errorObj = {error:{code:0, text:'backend error'}};
         return res.json(200, errorObj);*/
        throw err;
      }
      var companyId = body.companyId;
      var moduleId = body.moduleId;
      var submoduleId = body.submoduleId;
      var formfieldsId = body.formfieldsId;
      for(var index3 in formfieldsId){
        var UIConfigInfo  = {Company_CompanyId: companyId, Modules_ModuleId: moduleId, SubModule_SubModuleId: submoduleId, SubmoduleFieldConfig_SubmoduleFieldConfigId: formfieldsId[index3]};
        var saveUIConfigQuery = 'INSERT INTO ui_config SET ?';
        connection.query(saveUIConfigQuery, UIConfigInfo, function(err, result) {
          if (err) {
            return connection.rollback(function() {
              throw err;
            });
          }
          UiConfigId.push(result.insertId);
          console.log('result:[' JSON.stringify(result) ']');
          connection.commit(function(err) {
            if (err) {
              return connection.rollback(function() {
                connection.end(function(err) {
                  // The connection is terminated now
                });
                throw err;
              });
            } else {
              connection.end(function(err) {
                // The connection is terminated now
              });
            }
            return res.json(200,{UiConfigId: UiConfigId});
            console.log('UiConfigId:[' JSON.stringify(UiConfigId) ']');
            console.log('success!');
//                          connection.release();
          });
        })

      }

    })
  }
}
  

У меня есть вышеупомянутое в моем Node API. Мне приходится выполнять один и тот же запрос в цикле более одного раза. но я столкнулся с проблемой размещения инструкции return, для которой я получаю приведенную ниже ошибку.

Ошибка: не удается установить заголовки после их отправки. при ServerResponse.Исходящее сообщение.setHeader (_http_outgoing.js:335:11)

Как мне это исправить?

Ответ №1:

вы вызываете res.json несколько раз в цикле, вот почему вы получаете эту ошибку..

Простыми словами., Этот тип ошибки будет возникать, когда вы передаете инструкции или что-то еще после отправки ответа.

например:

 res.send("something response");
console.log("jhgfjhgsdhgfsdf");
console.log("sdgsdfhdgfdhgsdf");
res.send("sopmething response");
  

это генерирует, какую ошибку вы получили.!! Потому что после отправки ответа следующий res.send не будет выполнен .. потому что мы можем отправить ответ только один раз на запрос.!!
для этого вам нужно использовать обратные вызовы.

Удачи

Комментарии:

1. используйте для этого обратные вызовы .. обратитесь к нему, наверняка у вас появится идея .. mostafa-samir.github.io/async-iterative-patterns-pt1

Ответ №2:

Причина, по которой вы получаете эту ошибку, заключается в том, что вы вызываете res.json несколько раз в цикле.

Прежде всего, вы должны использовать механизм обратного вызова для выполнения запроса в цикле. Повторный запуск может привести к сбоям из-за выполнения нескольких запросов еще до завершения остальных.

И, переходя к ответу, это также должно быть сделано с помощью обратного вызова на основе условия. Условием может быть проверка, успешно ли вы завершили все запросы.

Вот страница с хорошей информацией о том, что именно вам нужно:https://mostafa-samir.github.io/async-iterative-patterns-pt1 /