从Heroku服务器上的NodeJS连接到Mysql

时间:2013-08-23 16:51:26

标签: mysql node.js heroku

我想知道如何从NodeJ连接到Heroku上的Mysql ClearDB?

我能够从Navicat连接到Heroku上运行的ClearDB Mysql,我甚至创建了一个名为t_users的表。但是我从Heroku的NodeJs连接时遇到了问题。

这是我的代码,它非常简单:一切正常,直到它尝试连接到MySQL

web.js:

var express = require("express");
var app = express();
app.use(express.logger());

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'us-cdbr-east-04.cleardb.com',
  user     : '',
  password : '',
  database : ''
});

connection.connect();

app.get('/', function(request, response) {
  response.send('Hello World!!!! HOLA MUNDOOOOO!!!');
  connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
      if (err) throw err;

      response.send('The solution is: ', rows[0].solution);
    });
});

var port = process.env.PORT || 5000;
app.listen(port, function() {
  console.log("Listening on " + port);
});

这是我在命令行上运行时得到的:Heroku config

C:\wamp\www\Nodejs_MySql_Heroku>heroku config
=== frozen-wave-8356 Config Vars
CLEARDB_DATABASE_URL: mysql://b32fa719432e40:87de815a@us-cdbr-east-04.cleardb.com/heroku_28437b49d76cc53?reconnect=true
PATH:                 bin:node_modules/.bin:/usr/local/bin:/usr/bin:/bin

这是LOG: http://d.pr/i/cExL

我想知道如何从NodeJ连接到Heroku上的Mysql ClearDB? 感谢

5 个答案:

答案 0 :(得分:4)

试试这个。希望这会对你有所帮助

mysql://b32fa719432e40:87de815a@us-cdbr-east-04.cleardb.com/heroku_28437b49d76cc53?reconnect=true

var connection = mysql.createConnection({
  host     : 'us-cdbr-east-04.cleardb.com',
  user     : 'b32fa719432e40',
  password : '87de815a',
  database : 'heroku_28437b49d76cc53'
});

使用此详细信息并将其连接到mySQL工作台,并导入localhost db

答案 1 :(得分:3)

基本代码还可以,我错过了一些NodeJS代码。

我做了一个视频,解释了如何在Heroku服务器上连接到MySqlusing NodeJS,看看:

http://www.youtube.com/watch?v=2OGHdii_42s

这是您想要查看的代码:

https://github.com/mescalito/MySql-NodeJS-Heroku

答案 2 :(得分:1)

应该使用池连接进行数据库连接以处理更好的mysql并发请求,如下所示

var pool = mysql.createPool({
    connectionLimit : 100,
    host : 'us-cdbr-iron-east-05.cleardb.net',
    user : 'b5837b0f1d3d06',
    password : '9d9ae3d5',
    database : 'heroku_db89e2842543609',
    debug : 'false'
});

这只是因为pool自己维护connection.release(),所以你不必费心去除你需要释放连接的地方。

另一方面,您应该提供我在代码中提到的用户,密码和数据库名称。 当您从heroku获得配置时,您将获得一个cleardb数据库名称。 单击清除数据库数据库按钮,您将找到用户名和密码。 要获取数据库URL,您必须在终端中运行以下命令,如下所示;     heroku登录     heroku app -all(显示应用列表名称)     heroku config --app appname(它将提供数据库URL)。

休息你需要担心,只需在推送到heroku master之前将所有依赖项添加到你的package.json中。 之后,将nodejs应用程序部署到heroku服务器没有问题。

答案 3 :(得分:1)

createConnections接受配置以及connectionString。

export function createConnection(connectionUri: string | ConnectionConfig): Connection;

因此下面的解决方案将起作用。

var connection = mysql.createConnection('mysql://b32fa719432e40:87de815a@us-cdbr-east-04.cleardb.com/heroku_28437b49d76cc53?reconnect=true);

或者您可以在环境变量DATABASE_URL

中设置连接网址
var connection = mysql.createConnection(process.env.DATABASE_URL);

答案 4 :(得分:0)

查看日志时间戳,您的连接似乎已超时。为“getConnection”创建一个包装器,用于检查连接运行状况并在必要时重新建立,或尝试使用mysql连接池功能,这可以为您完成。