2016-07-19 14 views
0

Ich versuche node.js zu lernen, damit ich tatsächlich mit der Arbeit an meinem persönlichen Projekt beginnen kann. Ich habe versucht, den Beispielen in dem Buch "Learning node.js" (von Marc Wandschneider) zu folgen. Ich beschloss zu diesem Zeitpunkt, darauf zu verzichten, sein Beispiel zu praktizieren und direkt seinen Code als Rahmen für meinen Praxiscode zu verwenden.Verbinden mit der RDS-Datenbank von node.js

In meiner Praxis-Code, alles, was ich versuche zu tun, ist eine Verbindung zu meiner RDS-Datenbank (nein, ich verwende nicht Elastic Beanstalk, BTW), und Inhalt einer der Tabellen ausgeben. Scheint einfach genug, aber wenn ich den Code dafür aufschreibe (basierend auf dem Buch), scheint es eine Verbindung herzustellen, aber ich werde dabei aufgelegt. Dies ist mein Code:

var pool = require('generic-pool'); 
var async = require('async'); 
var mysql = require('mysql'); 

var host = "<database-name>.cu8hvhstcity.us-west-2.rds.amazonaws.com", 
    database = "<database-name>", 
    user = "<username>", 
    password = "<someLongPassword>"; 

var dbClient; 

async.waterfall([ 
    // 1. establish connection to database 
    function (callback) { 
     console.log("Connecting to database " + database + "..."); 
     dbClient = mysql.createConnection({ 
      host: host, 
      database: database, 
      user: user, 
      password: password, 
      port: 3306 
     }); 
     dbClient.connect(); 
    }, 
    // 2. select all from a table (let's go for locations) 
    function (cb) 
    { 
     var query = "SELECT * FROM locations" 
     console.log("running query \"" + query + "\"..."); 
     dbClient.query(query, cb); 
    }, 

    function (rows, fields, callback) 
    { 
     console.log(fields); 
     for (var i = 0; i < rows.length; i++) 
     { 
      console.log(JSON.stringify(rows, null, '\t')); 
     } 
    } 



], function (err, results) { 
    if (err) 
    { 
     console.log("An error occurred..."); 
     console.log(err); 
    } 
    else 
    { 
     console.log("Everything successfully completed!"); 
    }  
    dbClient.end(); 
}) 

Das ist besser als erster Versuch, wenn ich ein database Mitglied auf das Argument zu mysql.createConnection() geben setzen, und es darüber beschwert, dass Datenbank unbekannt war. In keinem Fall ist entweder "Ein Fehler ist aufgetreten ..." noch "Alles ist erfolgreich abgeschlossen!" Ausgabe in das Fenster.

Gibt es irgendeinen Async-Kram, der zu einer Art Endlosschleife führt? Wie behebe ich das?

Das Buch hat einen zugehörigen GitHub page

HINWEIS:

Weder mein Beispiel noch die zitierten GitHub Code Verwendung dieses pool variabel zu machen, so dass es einfach nicht mehr kommentiert werden kann. Alles, was Sie tun müssen, um dies selbst auszuführen, ist npm install async, (sowie das Erstellen einer Dummy-RDS-Datenbank, auf die verwiesen wird, die die Tabelle locations enthält), bevor Sie diesen Code kopieren, einfügen und ausführen.

EDIT:

fixiert ich das Problem mit database. Ich erkannte, dass der Name der Datenbank '_', nicht '-' verwendete. Gleiches Problem (Code hängt), bleibt nach wie vor ...

Antwort

1

Ich habe folgende:

In der zweiten Funktion in der Anordnung, die ich brauchte zwei Parameter, nicht ein. Ich reparierte so: function(results, cb) Die dritte Funktion, die einfach zu callback(null)

benötigt wurde
Verwandte Themen