我在Heroku上部署了一个节点应用程序,并使用MySQL Workbench设置了ClearDB。当我使用npm run start时,效果很好,显示了数据。当我在Heroku中打开时; heroku local webheroku open应用已部署,但未显示任何数据。错误消息是资源:net :: ERR_CONNECTION_REFUSED。

我的数据库很小,因此大小限制不是问题。我的Procfile设置为

web: npm run start


为什么我的clearDB无法通过Heroku连接?

我读过的其他一些答案涉及到一个.env文件,而我却没有。我尝试使用DATABASE_URL创建一个,但没有更改。我还尝试将port: process.env.PORT || 3036添加到数据库配置文件中。

我可以通过MySQL Workbench连接到Heroku / ClearDB数据库,并且所有表都在那里。

我的数据库配置文件:

import mysql from 'mysql'

let pool = mysql.createPool({
connectionLimit: 10,
user: '******',
password: '*******',
host: '*******',
database: '*******',
port: process.env.PORT || 3036
});

let chirprdb = {};

chirprdb.all = () => {
return new Promise((resolve, reject) => {
    pool.query('SELECT * FROM chirps', (err, results) => {
        if (err) {
            return reject(err);
        }
        return resolve(results);
    })
})
}

export default chirprdb;


预期结果:在已部署的Heroku URL上查看该应用程序及其所有数据

实际结果:看到该应用程序但未加载任何数据,错误是资源:net :: ERR_CONNECTION_REFUSED

编辑
我更改了数据库(以便不在此处发布凭据),并与MySQL Workbench建立了新连接。单击“测试连接”给了我这个警告mysql - ClearDB连接“npm run start”,但不连接Heroku deploy; ERR_CONNECTION_REFUSED-LMLPHP

导入chirperdb的路由器

import { Router } from 'express';
import db from '../db'

let router = Router();

router.get('/:id?', async (req, res) => {
let id = req.params.id;
if (id) {
    try {
        let results = await db.one(id);
        res.json(results);
    } catch (e) {
        console.log(e);
        res.sendStatus(500);
    }
} else {
    try {
        let results = await db.all();
        res.json(results);
    } catch (e) {
        console.log(e);
        res.sendStatus(500);
    }
}
});

最佳答案

首先,在执行其他任何操作之前,请更改ClearDB凭据。您已将其发布在这里,并且您不再信任它们。编辑问题以将其删除是不够的。


  我读过的其他一些答案涉及到一个.env文件,而我却没有。我尝试使用DATABASE_URL创建一个,但没有更改。


不要在Heroku上使用.env文件。该文件只是填充环境变量的一种round回方式,但是Heroku supports environment variables natively。如果需要设置环境变量,请使用heroku config:set或Web界面进行设置。


  我还尝试将port: process.env.PORT || 3036添加到数据库配置文件中。


PORT环境变量是Web服务器需要侦听的端口,而不是用于连接数据库的端口。 ClearDB插件应该已经设置了一个CLEARDB_DATABASE_URL环境变量。使用该变量(或单独的CLEARDB_变量,如果必须的话)连接到MySQL。

您可以使用parse-database-url library解析单个CLEARDB_DATABASE_URL值并连接到数据库。

关于mysql - ClearDB连接“npm run start”,但不连接Heroku deploy; ERR_CONNECTION_REFUSED,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54641529/

10-16 20:13