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

4

有没有办法从NodeJs连接到运行在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配置。

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

这是日志: http://d.pr/i/cExL 有什么办法可以从NodeJs连接到Heroku上的Mysql ClearDB吗? 谢谢。

2
你在这个问题中包含了用户名和密码。快速更改你的密码。 - Nitzan Shaked
5个回答

6

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

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 Workbench中连接,并导入您的本地主机数据库。

这只适用于Node.js还是也适用于Python? - Daniel Tam

3

2

createConnections函数接受配置和连接字符串作为参数。

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

所以下面的解决方案将会奏效。
var connection = mysql.createConnection('mysql://b32fa719432e40:87de815a@us-cdbr-east-04.cleardb.com/heroku_28437b49d76cc53?reconnect=true);

您可以将连接URL设置在环境变量DATABASE_URL中。
var connection = mysql.createConnection(process.env.DATABASE_URL);

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'
});

这是因为池自己维护了连接.release(),所以您不必担心何时需要释放连接。

另一方面,您需要在我的代码中提供用户名、密码和数据库名称。 当您从Heroku获取配额时,会获得一个cleardb数据库名称。 点击clear db数据库按钮后,您将找到用户名和密码。 要获取数据库URL,您需要在终端中运行以下命令: heroku login heroku app -all(它显示应用程序列表名称) heroku config --app应用程序名称(它将提供数据库URL)。

其余的事情都不需要担心,只需在推送到heroku主服务器之前将所有依赖项添加到您的package.json中。 之后,您在部署nodejs应用程序到Heroku服务器时就不会遇到任何问题。


0

从日志时间戳来看,似乎您的连接超时了。可以创建一个包装器来检查连接状态并在必要时重新建立连接,或者尝试使用mysql连接池功能,它可以为您完成这个操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接