Klaus1: Verständnisproblem: MySQL-Queries in Node.js

Beitrag lesen

Hallo Rolf,

erstmal vielen Dank für Deine ausführlichen Erläuterungen. Da werde ich sicher erstmal durcharbeiten müssen. Da für mich asynchrone Aufrufe noch völliges Neuland sind, habe ich so meine Verständnisprobleme und hätte erstmal keinen erwarteten Unterschied zwischen meiner und Deiner Schleife gesehen.

Das von mir gezeigte Script ist natürlich eine Abstraktion meines eigentlichen Scripts und stellt keine 4 einfachen Selects dar. Ich hatte dieses Test-Script genutzt, um sicherzustellen, dass die SQL-Anfragen definitiv nacheinander gestellt werden, da mein eigentliches Script so aufgebaut ist. In meinem Fall wird zunächst geprüft, ob ein Eintrag vorhanden ist. Wenn ja, erfolgt ein Update, wenn nein, dann ein Insert. Meine Anfragen sind somit voneinander abhängig.

Um etwas genauer zu werden, habe ich eine Websocket-Verbindung für einen Chat aufgebaut, in der der Client Kommandos schicken kann, die dann ausgewertet werden. Sowas wie, Abfragen aber auch Schreiben von Kundenrabatten. Bei der Anmeldung wird geprüft, ob es den Benutzer gibt und ob er die Berechtigung hat. Wenn ein Kommando eingegeben wird, wird ebenso geprüft, gibt es das Kommando, sind die Parameter (Kundennr., Kundenrabatt, etc.) plausibel. Kurz, es lassen sich Werte lesen und ändern. Und das eben MySQL-gestützt. Und hier ist ein Phänomen/Problem aufgetreten: Es kommt (scheinbar sporadisch, zumindest für) vor, dass im folgenden Script-Schnipsel die Consolen-Ausgaben erfolgen, aber das komplette MySQL-Statement scheinbar ignoriert wird (weil keine Ausgabe erfolgt):

					console.log("vorher");
					strQuery = 'update clients set status = "online", last_contact = "'+localISOTime+'", socketname = "'+socket.name+'" where client = "'+ident+'"';
					pool.getConnection(function(err, connection) {
						connection.query(strQuery, function(err, rows) {
							if (err) {
								console.log("Fehler bei: "+strQuery);
								console.log(err);
							} else {
								if (rows.changedRows == 1) {
									console.log("Client logged in");
								} else {
									console.log('Client unknown!');
								}
							}
						});
						connection.release();
					});
					console.log("nachher");

Mal ganz platt gefragt: Muss ich die SQL-Abfragen einfach "kapseln" und über ein Callback aufrufen?

LG Klaus