【问题标题】:Connection to Mysql from NodeJS on Heroku server从 Heroku 服务器上的 NodeJS 连接到 Mysql
【发布时间】:2019-10-18 16:24:42
【问题描述】:

知道如何从 NodeJs 连接到 Heroku 上的 Mysql ClearDB?

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

这是我的代码,非常简单:一切正常,直到它尝试连接到 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

这是日志: http://d.pr/i/cExL

知道如何从 NodeJs 连接到 Heroku 上的 Mysql ClearDB 吗? 谢谢

【问题讨论】:

  • 您在这个问题中包含了用户名和密码。 快速更改您的密码。

标签: mysql node.js heroku


【解决方案1】:

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

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

【讨论】:

  • 这仅适用于 node.js 还是也适用于 python?
【解决方案2】:

基本代码没问题,我错过了一些 NodeJS 代码。

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

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

这是你想看的代码:

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

【讨论】:

    【解决方案3】:

    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中设置连接url

    var connection = mysql.createConnection(process.env.DATABASE_URL);
    

    【讨论】:

      【解决方案4】:

      应该需要使用池连接进行数据库连接以更好地处理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 app -all (显示应用列表名称) heroku config --app appname(它将提供数据库 url)。

      您需要担心的是,只需将所有依赖项添加到您的 package.json 中,然后再推送到 heroku master。 之后,您将 nodejs 应用程序部署到 heroku 服务器就没有问题了。

      【讨论】:

        【解决方案5】:

        查看日志时间戳,您的连接似乎正在超时。为“getConnection”创建一个包装器来检查连接健康并在必要时重新建立,或者尝试使用 mysql 连接池功能,它可以为您做到这一点。

        【讨论】:

          猜你喜欢
          • 2013-08-28
          • 2012-09-30
          • 2019-12-28
          • 2015-06-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-03
          • 1970-01-01
          相关资源
          最近更新 更多