ClearDB与'npm run start'连接但不与Heroku部署连接; ERR
我在Heroku上部署了一个节点应用程序,并使用MySQL Workbench设置了ClearDB。当我使用npm run start
时效果很好,数据显示出来。当我在Heroku打开; heroku local web
和heroku open
已部署应用程序,但未显示任何数据。错误消息是resource: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的新连接。点击“测试连接”给了我这个警告。
导入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
文件。该文件只是填充环境变量的一种迂回方式,但是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
值并连接到您的数据库。