Fehler: kann Nicht enqueue-Abfrage nach fatalem Fehler im mysql-Knoten
Ich bin mit felixge/node-mysql. Auch ich bin mit express-myconnection, die verhindert, dass mysql timeout und wiederum verhindert, dass das töten von node-server. Was ich mache, ist die Protokollierung der Aktivitäten in mysql. Das Szenario ist, ich habe ein Datei-upload-Funktion, sobald die Datei hochgeladen ist, ich bin die Durchführung verschiedener Operationen auf der Datei. Während jeder Phase der Verarbeitung bin ich die Protokollierung dieser Aktivitäten in der Datenbank. Dies funktioniert gut, wenn die Datei ist klein. Wenn die Datei groß ist, sagen wir 100 MB, es dauert einige Zeit zu laden, also in die mittlere Zeit, die der mysql-server verbindet und schafft einen neuen Anschluss, aber der logging-code verwendet immer noch die alte Referenz. Fehler: kann Nicht enqueue-Abfrage nach fatalem Fehler. So, meine Frage ist gibt es eine Möglichkeit, dass ich die neue Verbindung verwenden, Referenz anstelle des alten ein. Es gibt eine einzige Funktion, in der all die verschiedenen Phasen der Aktivitäten in Bezug auf die Datei erfolgt. Jede Hilfe wird sehr geschätzt. Dank
Hallo @paul, wenn Sie gesehen haben, die gist-link können Sie sehen, dass ich die hochladen.auf('begin', function (fileInfo, reqs, resp) { } wo ich angemeldet haben, die Aktivität, Datei-upload-Prozess beginnen. Sobald die Datei hochgeladen ist, hochladen.auf('end', function (fileInfo,request,response) { } ausgelöst wird. Ich bin auch Anmeldung gewisse Aktivität hier. Wie ich schon in meiner Frage, wenn die Datei groß ist, das hochladen dauert seine Zeit. In der Zwischenzeit eine neue MySql-Verbindung wird erstellt, aber die insert-Abfrage in 'Ende' Ereignis bezieht sich noch auf die alte myconnection. Also, ich wollte wissen, wie kann ich den neuen mysql-Verbindung Referenz in diesem Szenario? Ich hoffe, das erklärt hat, das Szenario besser.
Bitte überprüfen Sie den link gist.github.com/anonymous/ac4310635d6087cc6fe98d2cc27e27d9 Die erste insert-Anweisung funktioniert, wenn der upload-Prozess beginnt. Aber die zweite insert ist der Startschuss wenn ein upload-Vorgang abgeschlossen ist.Hier bezieht sich noch auf die alte Referenz von mysql-Prozess.
Ich bin immer noch nicht zu verstehen deine Frage. Sollten Sie eine andere Verbindung für jede Einheit der Arbeit. Verlassen Sie sich nicht auf Ihre Veranstaltungen abgegeben werden, innerhalb eines bestimmten Zeitrahmens.
Hallo @paul, ich habe erklärt, das Szenario in der oben genannten Frage. Bitte haben Sie einen Blick auf es.
Tut mir Leid, dies immer noch nicht die für mich Sinn machen. Von Ihrem Kern, wie es aussieht, bist du mit dem "pool" - option aus dem express-myconnection. Gegeben, dass Sie Fragen, die middleware, um Ihnen eine Verbindung jedes mal, wenn Sie wollen, um eine Abfrage machen (in der begin-und end-Stufen), sollten Sie verlassen sich auf Sie zum verwalten Ihrer verbindungen für Sie aus einem pool, und keine sorgen über, ob die Verbindung der 'gleichen' oder nicht.
InformationsquelleAutor Rahul Singh | 2016-06-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eigentlich, habe ich beschlossen, google, Ihre Fehler für Sie, und nach dem Lesen dieses Threads: https://github.com/felixge/node-mysql/issues/832 erkannte ich, dass Sie nicht die Freigabe der Verbindung, nachdem die erste Abfrage abgeschlossen ist, und so wird der pool nie versucht, erteilen Sie eine neue ein. Sie waren richtig, dass die veraltete Verbindung das problem sein könnte. hier ist, wie Sie zu beheben, dass, wenn es ist:
Hallo @paul, es scheint, dass express-myconnection-Modul einige Probleme hat. Ich habe die pool-option für single und es scheint zu funktionieren für 90 MB-Datei zu. Testen werde ich es wieder mit einigen mehr große Dateien. Vielen Dank für all die Hilfe.
Froh, dass ich helfen konnte, aber klein. Ich wollte erwähnen, dass ich noch nie verwendet haben, dass insbesondere Modul, und, dass die meisten Leute die ich kenne neigen dazu, zu verwalten, Ihre eigenen verbindungen (entweder durch eine neue erstellen zu jeder Anfrage oder explizit das ziehen / loslassen aus einem pool).
Für die pool-Verbindung zu arbeiten, müssen wir auskommentieren github.com/pwalczyszyn/express-myconnection/blob/master/lib/... diese Zeile. Hoffe es hilft jemand vor dem gleichen Problem.
Sie sollte a) die Antwort auf Ihre eigene Frage mit, die dann (macht es für andere leichter zu finden) und b) Sie legt einen pull-request an den Modul-Besitzer, um es zu beheben. Blick auf den code verwiesen, es sieht aus wie ein straight-up misimplementation den pool.
InformationsquelleAutor Paul
Für pool-Verbindung zu arbeiten, brauchen wir kommentieren https://github.com/pwalczyszyn/express-myconnection/blob/master/lib/express-myconnection.js#L84 dieser Linie. Hoffe es hilft jemand vor dem gleichen Problem.
Können auch wir verwenden eine einzige Verbindung-option.
InformationsquelleAutor Rahul Singh