2016-10-21 6 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(); 
      }); 
     }) 

     } 

    }) 
    } 
} 

私はNode APIに上記を持っています。ループ内で同じクエリを2回以上実行する必要があります。 imは以下のエラーを受け取ったreturn文を置く問題に直面しています。は、送信後にヘッダーを設定できません。返信res.json

エラー:送信後にヘッダーを設定できません。at ServerResponse.OutgoingMessage.setHeader(_http_outgoing.js:335:11)

どうすれば修正できますか?

答えて

0

あなたがループ内で複数回res.json呼び出している、それはあなたがそのエラーを取得している理由..です

単純な言葉では、このタイプのエラーは、応答を送信した後に文などを渡すときに発生します。例えば

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

それはエラーuが得たものを、生成さ!!。 Beccozが応答を送信すると、次のres.sendは実行されません。リクエストごとに1回のみ応答を送信できます。 これに対して、コールバックを使用する必要があります。

幸運

+0

ありがとうございます。どのように私はそれを解決するのですか? –

+0

はそのコールバックを使用します。それを参照すると、確かにあなたはアイデアを得るでしょう.. https://mostafa-samir.github.io/async-iterative-patterns-pt1/ – Trojan

0

このエラーが発生する理由は、res.jsonをループ内で複数回呼び出すためです。

まず、コールバックメカニズムを使用してループ内でクエリを実行する必要があります。それ以上のことは、他のものが終了する前に複数のクエリを実行することによって混乱する可能性があります。

応答には、条件に基づいてコールバックを行う必要があります。条件は、すべてのクエリが正常に終了したかどうかをチェックすることです。ここで

はあなたが必要な正確に何の良い情報のページです: https://mostafa-samir.github.io/async-iterative-patterns-pt1/

関連する問題