2016-05-21 7 views
2

Ich bin neu in NodeJS. Ich habe das folgende Snippet.NodeJS Async mit mysql verwechselt mich

var connection = mysql.createConnection(dbConfig); 

connection.connect(function(err) { 
    if (err) 
     console.log("MySQL Connection Error: ", err); 
    else 
     console.log("Connection successfully established"); 

}); 

connection.query("SELECT * FROM `members1617`;",function(err,rows) { 
    if (err) 
     console.log("err: ", err); 
    else 
     console.log("rows: ",rows); 

    connection.end(); 
}); 

Ist das ein schlechter Code? Ich denke, es ist, weil es keine Garantie gibt, dass connection.connect() abgeschlossen ist und die Verbindung hergestellt wurde, bevor die Abfrage aktiviert wird. Und wenn die Abfrage ausgeführt wird, bevor die Verbindung hergestellt wird, werden alle möglichen Fehler auftreten. Wie arbeitet der Async hier?

Antwort

2

Ich würde empfehlen, dass Sie knex, eine einfache Abfrage Builder Wrapper für die beliebte node-mysql Bibliothek verwenden.

Nach der Initialisierung Knex erhalten Sie ein Objekt ist ein Verbindungspool zu Ihrer Datenbank. An dieses Objekt können Funktionen angekettet werden, um Abfragen auszuführen. Abfragen geben Versprechungen zurück und werden nur ausgeführt, wenn eine Verbindung ordnungsgemäß hergestellt wurde. Knex erledigt das automatisch für Sie.

Ihr Code würde wie folgt aussehen:

function getMembers(){ 
    return knex.select().from('members1617') 
    .then(rows => return rows) 
    .catch(err => console.log(err)) 
} 

Es ist so einfach.

Ich würde auch empfehlen, dass Sie eine Versprechen-Bibliothek wie Bluebird verwenden, damit Sie Versprechungen und Versprechen Ketten richtig behandeln können.

Bitte beachten Sie: Unabhängig davon, ob Sie sich für knex oder node-mysql entscheiden oder nicht, würde ich Ihnen wärmstens empfehlen, entweder Versprechungen oder Generatoren zu verwenden, um den asynchronen Steuerungsfluss in Node zu behandeln. Es stehen Ihnen mehrere Tutorials und Blogs zur Verfügung.

+0

Empfiehlst du async.js? –

+0

Ich habe Async selbst nicht verwendet. Die async/await-Funktionalität sollte nativ in der JavaScript-Sprache in ES 7 enthalten sein. Es würde nicht schaden, verschiedene Methoden zum Umgang mit asynchronem Code zu lernen, ohne dass Sie nur die verschiedenen Bibliotheken, die Sie verwenden, verstehen. Versprechen sind sehr weit verbreitet, so dass es zurückkommen wird, um dich eines Tages zu beißen, wenn du sie beschönigst. –