{已解决}。新错误
Heroku 日志错误:
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 前端(现在托管在 Netlifty 上) 使用 Express 和 MYSQL2 的 Javascript Node 后端(托管在 Heroku 上)
目标: 将 Neflifty 前端 POST 请求与 Heroku 后端连接,获取 POST 负载数据并将其插入 MYSQL 表中。
更新:2021 年 9 月 24 日
我已经完成了所有建议的事情。我已经使用clearDB 创建了一个新数据库。添加它并在 mysql Workbench 中测试连接。创建了所需的表。更新了用于创建与新数据库的连接的后端代码。检查 Heroko 变量并确保它们正确反映到新数据库中。现在有一个授权问题。 {已解决}
经过更正的新后端代码:
const express = require('express'); const app = express(); const port = process.env.Port || 8000 app.list en(port); console.log(`server is listing on ${port}`);超时
问题: 如果这在工作台上本地连接,如果将它们添加为变量,为什么 Heroku 不会连接? {已回答}
新问题: 为什么它应该使用环境时却尝试使用端口 8000?为什么会超时?
对此的任何帮助将不胜感激。
您无法连接到数据库,因为 Heroku 上没有运行任何数据库实例。一旦您使用 Heroku CLI 推送代码,Heroku 就会为您设置一个 NodeJS 应用程序,但这并不意味着它也会为您设置一个数据库。
您可以通过 Heroku 的界面或 CLI 将数据库添加到您的应用程序。从 CLI(我们将设置 ClearDB,但任何 MySQL 数据库插件都可以工作):
完成之后,您想要新的数据库 URL(不是 localhost):
最后一个命令的输出将类似于:
现在,有了这个,您应该使用新信息稍微修改您的代码。您不想在版本控制中公开数据库凭据,因此您可以使用环境变量来完成它:
此外,您需要为正在运行的 Heroku 应用程序设置环境变量:
现在,您有一个在 Heroku 上运行的数据库实例和一个可以连接到该数据库的 NodeJS 应用程序实例。
要进一步阅读,您可能想查看这些链接:
https:// /lo-victoria.com/build-a-mysql-nodejs-crud-app-4-deploying-to-heroku-finale
https://www.bezkoder.com/部署节点-js-app-heroku-cleardb-mysql/
https://raddy.co.uk/blog/how-to-deploy-node-js-express-ejs-mysql-website-on-heroku-cleardb/(这个使用 Heroku 的界面)