Heim  >  Fragen und Antworten  >  Hauptteil

原标题:Was verursacht diesen Heroku-MySQL-Verbindungsfehler? (Versuch, Front-End mit Back-End-POST-Anfrage zu verbinden) Identifizieren der Quelle des Heroku-MySQL-Verbindungsfehlers beim Verbinden von Front-End mit Back-End

{GELÖST}. Neuer Fehler

Heroku-Protokollfehler:

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

Informationen/Hintergrund:

React js Frontend (jetzt auf Netlifty gehostet) Javascript-Knoten-Backend mit Express und MYSQL2 (gehostet auf Heroku)

Ziel: Verbinden Sie die POST-Anfrage des Neflifty-Frontends mit dem Heroku-Backend, rufen Sie POST-Nutzlastdaten ab und fügen Sie sie in die MYSQL-Tabelle ein.

Aktualisiert: 24. September 2021

Ich habe alles getan, was vorgeschlagen wurde. Ich habe mit clearDB eine neue Datenbank erstellt. Fügen Sie es hinzu und testen Sie die Verbindung in MySQL Workbench. Die erforderlichen Tabellen werden erstellt. Aktualisierter Backend-Code zum Erstellen von Verbindungen zu neuen Datenbanken. Überprüfen Sie die Heroko-Variablen und stellen Sie sicher, dass sie in der neuen Datenbank korrekt wiedergegeben werden. Jetzt gibt es ein Autorisierungsproblem. {Gelöst}

Neuer korrigierter Backend-Code:


const express = require('express');

const app = express();

const port = process.env.Port || 8000

app.list en(port);
console.log(`server is listing on ${port}`);
Auszeit


Frage: Wenn die Verbindung lokal auf der Workbench hergestellt wird, warum stellt Heroku dann keine Verbindung her, wenn ich sie als Variablen hinzufüge? {Beantwortet}

Neue Frage: Warum versucht es, Port 8000 zu verwenden, obwohl es die Umgebung verwenden sollte? Warum kommt es zu einer Zeitüberschreitung?

Jede Hilfe hierzu wäre sehr dankbar.

P粉021553460P粉021553460311 Tage vor650

Antworte allen(1)Ich werde antworten

  • P粉610028841

    P粉6100288412023-12-14 09:46:11

    您无法连接到数据库,因为 Heroku 上没有运行任何数据库实例。一旦您使用 Heroku CLI 推送代码,Heroku 就会为您设置一个 NodeJS 应用程序,但这并不意味着它也会为您设置一个数据库。

    您可以通过 Heroku 的界面或 CLI 将数据库添加到您的应用程序。从 CLI(我们将设置 ClearDB,但任何 MySQL 数据库插件都可以工作):

    heroku addons:create cleardb:ignite

    完成之后,您想要新的数据库 URL(不是 localhost):

    heroku config | grep CLEARDB_DATABASE_URL

    最后一个命令的输出将类似于:

    mysql://:@/?reconnect=true

    现在,有了这个,您应该使用新信息稍微修改您的代码。您不想在版本控制中公开数据库凭据,因此您可以使用环境变量来完成它:

    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
    });
    

    此外,您需要为正在运行的 Heroku 应用程序设置环境变量:

    heroku config:set DB_USER=
    heroku config:set DB_PASSWORD=
    heroku config:set DB_HOST=
    heroku config:set DATABASE=

    现在,您有一个在 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 的界面)< /p>

    Antwort
    0
  • StornierenAntwort