2017-11-15 1 views
0

Ich habe eine Reihe von api und ich posten die Daten in die Datenbank, als Antwort ich die erforderliche Antwort in json Formular aus der Datenbank abrufen. Das Problem, dem ich gegenüberstehe, ist, wenn ich Daten zum ersten Mal poste, wird es gepostet und zum zweiten Mal wird mein Server abgestürzt und gibt Fehler: Kann Header nicht einstellen, nachdem sie gesendet werden. Ich weiß nicht, warum ich diesen Fehler bekomme. Bitte lassen Sie mich wissen, wo ich falsch werdeServer-Crash-Problem in Nodejs

router.post('/addcustomerskills', function(req,res) { 
    var skill = req.body.skill; 
    var skill_id = req.body.skill_id; 
    var skill_name = req.body.skill_name; 
    var rating = req.body.rating; 
    var response = {}; 

    if (typeof skill ==='undefined') { 
     response.token = '2ewerr4'; 
     response.success = false, 
     response.skill = null; 
     response.mssg = 'fields cannot be empty'; 
     res.json(response); 
    } else { 
     var j =1; 
     for (i in skill) { 
      var skillObj=skill[i]; 
      db.query('INSERT into skill(skill_id,skill_name,rating) values(?,?,?)', [skillObj.skill_id, skillObj.skill_name, skillObj.rating], function(error, rows) { 
       if (error) { 
        res.json(error); 
       } else {   
        db.query('select id,skill_id,skill_name,rating FROM skills WHERE skill_id = ?', [skillObj.skill_id], function(error, rows) { 
         response.success = true, 
         //response.skills = rows; 
         response.skills = skill; 
         response.mssg = 'Successfully Updated'; 
         if(j === 1) { 
          j = 0; 
          res.json(response); 
         }   
        }) 
       } 
      }); 
     } 
    } 
}); 
+0

1. Datei, wenn Sie eine zweite Anfrage senden, haben Sie mehr als eine Fähigkeiten richtig? 2. Ist skillId in Ihrer 'db table' auf 'unique' gesetzt? –

+0

können Sie mir sagen, dass dies der einzige Code ist, den Sie verwenden, oder Sie den hier einzufügenden Code kürzen müssen. –

+0

Dies ist der einzige Code, den ich benutze @Himanshusharma – SRK

Antwort

0

Da db.query() Werke in asynchroner Weise können Sie dieses Problem auftritt.

Also, versuchen Sie diese

router.post('/addcustomerskills', function(req,res) { 
    var skill = req.body.skill; 
    var skill_id = req.body.skill_id; 
    var skill_name = req.body.skill_name; 
    var rating = req.body.rating; 
    var response = {}; 

    if (typeof skill ==='undefined') { 
     response.token = '2ewerr4'; 
     response.success = false, 
     response.skill = null; 
     response.mssg = 'fields cannot be empty'; 
     res.json(response); 
    } else { 
     var i, count = 0; 
     // var j = 1; 
     var result = []; 
     for (i in skill) { 
      count++; 
      var skillObj=skill[i]; 
      db.query('INSERT into skill(skill_id,skill_name,rating) values(?,?,?)', [skillObj.skill_id, skillObj.skill_name, skillObj.rating], function(error, rows) { 
       if (error) { 
        result.push(response); 
        response = {}; 
        if(count == skill.length){ 
         res.json(result); 
        } 
       } else {   
        db.query('select id,skill_id,skill_name,rating FROM skills WHERE skill_id = ?', [skillObj.skill_id], function(innerError, innerRows) { 
         response.success = true, 
         //response.skills = innerRows; 
         response.skills = skill; 
         response.mssg = 'Successfully Updated'; 

         // I don't understand why you have used the variable 'j', so I commented it 
         // if(j === 1) { 
         //  j = 0; 
         //  res.json(response); 
         // }   

         result.push(response); 
         response = {}; 
         if(count == skill.length){ 
          res.json(result); 
         } 
        }); 
       } 
      }); 
     } 
    } 
}); 

und einen separaten Variablennamen, sollten Sie auch verwenden, wenn Sie die db.query()

+0

sollte ich es innerhalb der Schleife oder außerhalb der Schleife verwenden – SRK

+0

gerade jetzt ich implementiert, aber wieder mein Server wurde abgestürzt – SRK

+0

@SRK Gerade jetzt habe ich meinen Beitrag bearbeitet. Probieren Sie es aus! – srimadhan11

0

Fehler sind Verschachtelung: Header nicht gesetzt, nachdem sie gesendet werden.

hat einfache Bedeutung, dass Sie res mehrere Zeit senden.

@SRK der Fehler hier ist diese

Sie haben for loop, in dem Sie res zurück jedes Mal senden, wenn Sie auf die Datenbank abfragen.

Senden Sie die Antwort nach dem Beenden der for-Schleife zurück.

router.post('/addcustomerskills', function(req,res) { 
    var skill = req.body.skill; 
    var skill_id = req.body.skill_id; 
    var skill_name = req.body.skill_name; 
    var rating = req.body.rating; 
    var response = {}; 

    if (typeof skill ==='undefined') { 
     response.token = '2ewerr4'; 
     response.success = false, 
     response.skill = null; 
     response.mssg = 'fields cannot be empty'; 
     res.json(response); 
    } else { 
     var j =1; 
     for (i in skill) { 
      var skillObj=skill[i]; 
      db.query('INSERT into skill(skill_id,skill_name,rating) values(?,?,?)', [skillObj.skill_id, skillObj.skill_name, skillObj.rating], function(error, rows) { 
       if (error) { 

       } else {   
        db.query('select id,skill_id,skill_name,rating FROM skills WHERE skill_id = ?', [skillObj.skill_id], function(error, rows) { 
         response.success = true, 
         //response.skills = rows; 
         response.skills = skill; 
         response.mssg = 'Successfully Updated'; 
         if(j === 1) { 
          j = 0; 

         }   
        }) 
       } 
      }); 
     } 
    res.json({"message":"what you want to send"}); 
    } 
}); 

Wenn Sie wollen, dass diese Schwärmerei hinzufügen in der Haupt node.js zu handhaben

process.on('uncaughtException', (err) => { 
    console.log("error",error); 
}); 
+0

ich versuchte diese Technik, aber immer noch ich konfrontiert das gleiche Problem – SRK

+0

Das wird funktionieren, fügen Sie keine Res in für Schleife –

+0

Ich implementierte Ihre Technik, aber ich bin leer Resopnse – SRK