2016-10-21 3 views
1
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 && 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(); 
      }); 
     }) 

     } 

    }) 
    } 
} 

Ich habe die oben in meiner Node-API. Ich muss dieselbe Abfrage in Schleife mehr als einmal ausführen. aber im Blick auf ein Problem mit der Rückkehr Erklärung für die ich bekomme den Fehler unten.kann Header nicht festlegen, nachdem sie gesendet wurden res.json

Fehler: Header können nach dem Senden nicht festgelegt werden. bei ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js: 335: 11)

Wie kann ich es beheben?

Antwort

0

Sie mehrmals in einer Schleife rufen res.json, das ist der Grund, warum Sie werden diese Fehler bekommen ..

In einfachen Worten., Diese Art von Fehler wird erhalten, wenn Sie Anweisungen oder etwas nach dem Senden der Antwort übergeben.

zum Beispiel:

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

es erzeugt, was der Fehler bekam u !!. Beccoz sobald die Antwort gesendet wurde, wird der folgende res.Send nicht ausgeführt .. weil wir Antwort nur einmal pro Anfrage senden können. !! hierfür müssen Sie die Rückrufe verwenden.

Viel Glück

+0

danke für die Erklärung. Wie löse ich es? –

+0

Verwenden Sie die Rückrufe für das .. refer es, sicherlich werden Sie eine Idee bekommen .. https://mostafa-samir.github.io/async-iterative-patterns-pt1/ – Trojan

0

Der Grund, warum Sie diesen Fehler erhalten, ist, weil Sie res.json mehrmals in einer Schleife aufrufen.

Als Erstes sollten Sie einen Rückrufmechanismus verwenden, um die Abfrage in einer Schleife auszuführen. Es kann zu Fehlern führen, indem mehrere Abfragen ausgeführt werden, bevor die anderen beendet sind.

Und zu der Antwort kommt, sollte es auch durch einen Rückruf basierend auf einer Bedingung erfolgen. Bedingung kann sein, zu prüfen, ob Sie alle Abfragen erfolgreich abgeschlossen haben.

Hier ist eine Seite mit guten Informationen ist genau das, was Sie brauchen: https://mostafa-samir.github.io/async-iterative-patterns-pt1/

Verwandte Themen