2017-04-26 1 views
2

Bevor ich diese Frage gestellt habe, habe ich ein paar SO-Posts mit derselben Überschrift durchgesehen. Alle haben mir vorgeschlagen, meine App neu zu starten. Ich habe das versucht, aber ich bekomme immer noch den Fehler.Node.js - events.js throw er

Der Code, der den Fehler zu werfen ist

app.post('/insert', function(request, response) { 
    var connection = mySequel.createConnection(ConnectionParams); 
    connection.connect(); 
    var UserName = request.body.UserName; 
    //  insert into userrecords values ("123456",DEFAULT,DEFAULT,DEFAULT,10); 
    var InsertQuery = "insert into userrecords values (" + UserName + ",DEFAULT,DEFAULT,DEFAULT,-10);"; 
    connection.query(InsertQuery, function(error, result, fields) { 
     if (error) { 
      response.send("error"); 
      console.log(error); 
      throw error; 
     } else { 
      // response.send("success"); 
      console.log(result.insertId); 
      response.send(result.insertId); 
     } 
    }); 
    connection.end(); 
}); 

Der Fehler durch den Code verursacht wird, ist dies

events.js:160 
2017-04-26T11:42:52.410094+00:00 app[web.1]: 
2017-04-26T11:42:52.410092+00:00 app[web.1]:  throw er; // Unhandled 'error' event 
2017-04-26T11:42:52.410096+00:00 app[web.1]: Error: Quit inactivity timeout 
2017-04-26T11:42:52.410097+00:00 app[web.1]:  at Quit.<anonymous> (/app/node_modules/mysql/lib/protocol/Protocol.js:160:17) 
2017-04-26T11:42:52.410093+00:00 app[web.1]:  ^
2017-04-26T11:42:52.410098+00:00 app[web.1]:  at emitNone (events.js:86:13) 
2017-04-26T11:42:52.410099+00:00 app[web.1]:  at Quit._onTimeout (/app/node_modules/mysql/lib/protocol/sequences/Sequence.js:127:8) 
2017-04-26T11:42:52.410099+00:00 app[web.1]:  at Quit.emit (events.js:185:7) 
2017-04-26T11:42:52.410100+00:00 app[web.1]:  at ontimeout (timers.js:380:14) 
2017-04-26T11:42:52.410101+00:00 app[web.1]:  at tryOnTimeout (timers.js:244:5) 
2017-04-26T11:42:52.410102+00:00 app[web.1]:  at Timer.listOnTimeout (timers.js:214:5) 

ich meine App auf Heroku bin Hosting und wenn ich versuche, diese URL für den Zugriff auf die App stürzt ab und zwingt mich, den Dyno neu zu starten. Die Daten, die ich sende, werden erfolgreich in die Datenbank eingefügt, aber der automatisch inkrementierte Primärschlüssel wird nicht an meine App zurückgegeben. Stattdessen erhalte ich einen Serverfehler.

JSON.stringify() gibt den korrekten Wert einmal zurück und danach stürzte die App ab, was dazu führte, dass nachfolgende Anforderungen fehlschlagen.

Wie kann ich dieses Problem lösen?

+0

als eine Randnotiz, das sieht aus wie ein guter Kandidat für einige SQL-Injektion. – Kosch

+0

Ich weiß ... Seit diesem ich einige npm testete, nicht einige Produktionsqualität Code ich nicht viel Aufmerksamkeit. Wenn @Kosch weiß, wo ich lernen kann, diese Art von Code effizienter zu schreiben, bitte mich anweisen. – Tyson

Antwort

2

Versuchen Sie, Ihre Antwort vor dem Senden in JSON zu konvertieren.

Wie

response.send(JSON.stringify(result.insertId));

Auch ich hatte mal ein ähnliches Problem und ich denke, das ist, wie ich es gelöst.

EDIT:

Ich ging durch die myql npm Bibliothek und fand genannt etwas Pool. Der Pool wird verwendet, wenn Ihre App mehrere Anfragen gleichzeitig bearbeiten muss. Ich schlage vor, dass Sie das versuchen. Es gibt ein gutes Beispiel availble here.

+0

Dies funktionierte einmal und danach stürzte die App wieder mit dem gleichen Fehler ab – Tyson

Verwandte Themen