从 node.js 连接到 RDS 数据库
Connecting to RDS database from node.js
我正在努力学习 node.js 以便我可以真正开始从事我的个人项目。我一直在尝试遵循 "Learning node.js"(Marc Wandschneider 着)一书中的示例。在这一点上,我决定放弃练习他的例子,直接使用他的代码作为我练习代码的框架。
在我的练习代码中,我想做的就是连接到我的 RDS 数据库(顺便说一句,我没有使用 Elastic Beanstalk),并输出其中一个 table 的内容。看起来很简单,但是当我为它编写代码时(基于书中),它似乎尝试连接,但在这个过程中被挂断了。这是我的代码:
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();
})
这比第一次尝试要好,当时我将一个 database
成员放在传递给 mysql.createConnection()
的参数中,它抱怨数据库未知。 "An error occurred..." 和 "Everything successfully completed!" 都没有输出到 window.
是否有任何异步操作导致某种非终止无限循环之类的?我该如何解决这个问题?
这本书有一个关联 GitHub page
注意:
我的示例和引用的 GitHub 代码均未使用该 pool
变量,因此可以简单地将其注释掉。所有你需要做的 运行 这自己就是说 npm install async
,npm install mysql
(以及创建一个虚拟 RDS 数据库指向,其中包含 locations
table) 在复制、粘贴和 运行ning 这段代码之前。
编辑:
我用 database
解决了这个问题。我意识到数据库的名称使用了“_”,而不是“-”。同样的问题(代码挂起)仍然存在...
我做了以下事情:
在数组的第二个函数中,我需要两个参数,而不是一个。
我这样修正:function(results, cb)
第三个函数只需要 callback(null)
我正在努力学习 node.js 以便我可以真正开始从事我的个人项目。我一直在尝试遵循 "Learning node.js"(Marc Wandschneider 着)一书中的示例。在这一点上,我决定放弃练习他的例子,直接使用他的代码作为我练习代码的框架。
在我的练习代码中,我想做的就是连接到我的 RDS 数据库(顺便说一句,我没有使用 Elastic Beanstalk),并输出其中一个 table 的内容。看起来很简单,但是当我为它编写代码时(基于书中),它似乎尝试连接,但在这个过程中被挂断了。这是我的代码:
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();
})
这比第一次尝试要好,当时我将一个 database
成员放在传递给 mysql.createConnection()
的参数中,它抱怨数据库未知。 "An error occurred..." 和 "Everything successfully completed!" 都没有输出到 window.
是否有任何异步操作导致某种非终止无限循环之类的?我该如何解决这个问题?
这本书有一个关联 GitHub page
注意:
我的示例和引用的 GitHub 代码均未使用该 pool
变量,因此可以简单地将其注释掉。所有你需要做的 运行 这自己就是说 npm install async
,npm install mysql
(以及创建一个虚拟 RDS 数据库指向,其中包含 locations
table) 在复制、粘贴和 运行ning 这段代码之前。
编辑:
我用 database
解决了这个问题。我意识到数据库的名称使用了“_”,而不是“-”。同样的问题(代码挂起)仍然存在...
我做了以下事情:
在数组的第二个函数中,我需要两个参数,而不是一个。
我这样修正:function(results, cb)
第三个函数只需要 callback(null)