{已解決}。新錯(cuò)誤
Heroku 日志錯(cuò)誤:
Error: connect ECONNREFUSED 127.0.0.1:3306 2021-09-23T18:24:12.236657+00:00 app[web.1]: at TCPConnectWrap.afterConnect. [as oncomplete] (node:net:1146:16) { 2021-09-23T18:24:12.236658+00:00 app[web.1]: errno: -111, 2021-09-23T18:24:12.236658+00:00 app[web.1]: code: 'ECONNREFUSED', 2021-09-23T18:24:12.236658+00:00 app[web.1]: syscall: 'connect', 2021-09-23T18:24:12.236659+00:00 app[web.1]: address: '127.0.0.1', 2021-09-23T18:24:12.236659+00:00 app[web.1]: port: 3306, 2021-09-23T18:24:12.236659+00:00 app[web.1]: fatal: true
信息/背景:
React js 前端(現(xiàn)在托管在 Netlifty 上) 使用 Express 和 MYSQL2 的 Javascript Node 后端(托管在 Heroku 上)
目標(biāo): 將 Neflifty 前端 POST 請(qǐng)求與 Heroku 后端連接,獲取 POST 負(fù)載數(shù)據(jù)并將其插入 MYSQL 表中。
更新:2021 年 9 月 24 日
我已經(jīng)完成了所有建議的事情。我已經(jīng)使用clearDB 創(chuàng)建了一個(gè)新數(shù)據(jù)庫(kù)。添加它并在 mysql Workbench 中測(cè)試連接。創(chuàng)建了所需的表。更新了用于創(chuàng)建與新數(shù)據(jù)庫(kù)的連接的后端代碼。檢查 Heroko 變量并確保它們正確反映到新數(shù)據(jù)庫(kù)中?,F(xiàn)在有一個(gè)授權(quán)問題。 {已解決}
經(jīng)過更正的新后端代碼:
const express = require('express'); const app = express(); const port = process.env.Port || 8000 app.list en(port); console.log(`server is listing on ${port}`);超時(shí)
問題: 如果這在工作臺(tái)上本地連接,如果將它們添加為變量,為什么 Heroku 不會(huì)連接? {已回答}
新問題: 為什么它應(yīng)該使用環(huán)境時(shí)卻嘗試使用端口 8000?為什么會(huì)超時(shí)?
對(duì)此的任何幫助將不勝感激。
您無法連接到數(shù)據(jù)庫(kù),因?yàn)?Heroku 上沒有運(yùn)行任何數(shù)據(jù)庫(kù)實(shí)例。一旦您使用 Heroku CLI 推送代碼,Heroku 就會(huì)為您設(shè)置一個(gè) NodeJS 應(yīng)用程序,但這并不意味著它也會(huì)為您設(shè)置一個(gè)數(shù)據(jù)庫(kù)。
您可以通過 Heroku 的界面或 CLI 將數(shù)據(jù)庫(kù)添加到您的應(yīng)用程序。從 CLI(我們將設(shè)置 ClearDB,但任何 MySQL 數(shù)據(jù)庫(kù)插件都可以工作):
heroku addons:create cleardb:ignite
完成之后,您想要新的數(shù)據(jù)庫(kù) URL(不是 localhost):
heroku config | grep CLEARDB_DATABASE_URL
最后一個(gè)命令的輸出將類似于:
mysql://: @ / ?reconnect=true
現(xiàn)在,有了這個(gè),您應(yīng)該使用新信息稍微修改您的代碼。您不想在版本控制中公開數(shù)據(jù)庫(kù)憑據(jù),因此您可以使用環(huán)境變量來完成它:
const db = mysql.createConnection({ connectionaLimit: 50, user: process.env.DB_USER, host: process.env.DB_HOST, password: process.env.DB_PASSWORD, database: process.env.DATABASE, port: 3306 });
此外,您需要為正在運(yùn)行的 Heroku 應(yīng)用程序設(shè)置環(huán)境變量:
heroku config:set DB_USER=heroku config:set DB_PASSWORD= heroku config:set DB_HOST= heroku config:set DATABASE=
現(xiàn)在,您有一個(gè)在 Heroku 上運(yùn)行的數(shù)據(jù)庫(kù)實(shí)例和一個(gè)可以連接到該數(shù)據(jù)庫(kù)的 NodeJS 應(yīng)用程序?qū)嵗?/p>
要進(jìn)一步閱讀,您可能想查看這些鏈接:
https:// /lo-victoria.com/build-a-mysql-nodejs-crud-app-4-deploying-to-heroku-finale
https://www.bezkoder.com/部署節(jié)點(diǎn)-js-app-heroku-cleardb-mysql/
https://raddy.co.uk/blog/how-to-deploy-node-js-express-ejs-mysql-website-on-heroku-cleardb/(這個(gè)使用 Heroku 的界面)