【问题标题】:Heroku error: "connect ECONNREFUSED 127.0.0.1:3306" when trying to deploy Express + React applicationHeroku 错误:尝试部署 Express + React 应用程序时出现“连接 ECONNREFUSED 127.0.0.1:3306”
【发布时间】:2020-07-14 15:50:32
【问题描述】:

我试图将我的 Express + React 应用程序部署到 Heroku。 Heroku 与我的 Github 帐户成功连接,然后单击“部署分支”导致“您的应用程序已成功部署”。但是当我去查看我的网站时,它显示:

“应用程序错误应用程序发生错误,无法提供您的页面。如果您是应用程序所有者,请查看您的日志以了解详细信息”。

这是我的日志:

Starting process with command `npm start`
> myproject@ start /app
> node backend/index.js
My project SQL server listening on PORT 4000
/app/backend/index.js:22
if (err) throw err;
^
Error: connect ECONNREFUSED 127.0.0.1:3306
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16)

还有连接 MySQL 的index.js

const express = require('express');
const cors = require('cors');
const mysql = require('mysql');
const app = express();

app.use(cors());

app.get('/', (req, res) => {
    res.send('go to /my-project to see my project')
});

const pool = mysql.createPool({
    connectionLimit: 10,
    host: 'localhost',
    user: 'root',
    password: 'myjs123@',
    database: 'my-project',
    debug: false
});

pool.getConnection((err, connection) => {
    if (err) throw err;
    app.get('/my-project', (req, res) => {
        connection.query(SELECT_ALL_FACTS_QUERY, (err, results) => {
            if (err) {
                return res.send(err)
            }
            else {
                return res.json({
                    data: results
                })
            };
        });
    });

});

const SELECT_ALL_FACTS_QUERY = 'SELECT * FROM `my-project`.`my-table`;';

app.listen(4000, () => {
    console.log('My project SQL server listening on PORT 4000');
});

我做错了什么以及如何部署它?

【问题讨论】:

    标签: node.js reactjs express heroku


    【解决方案1】:

    我认为在下面的代码中不应使用 localhost,localhost 在部署中将不起作用。

    const pool = mysql.createPool({
        connectionLimit: 10,
        //here
        host: 'localhost',
        user: 'root',
        password: 'myjs123@',
        database: 'my-project',
        debug: false
    });
    

    我发现的另一个错误是你应该使用环境变量来存储 端口号。在生产中,端口号由 Heroku 分配,如果没有分配给你 可以赋值。所以你的代码应该是

    let port=process.env.PORT||4000
    app.listen(port, () => {
        console.log(`App running on port ${port} `);
    });
    

    【讨论】:

    • 我应该删除host: 'localhost' 还是应该更改其他内容?
    • 你应该换成别的。在部署中,应该有远程 MySQL 数据库服务(localhost 将不起作用)。我想你创造了它,如果没有,那就创造一个。该视频可能对您有所帮助。 youtube link
    【解决方案2】:

    在我删除if (err) throw err; 后它通过了这个阶段,仍然不知道为什么会发生这种情况。

    Nithin 的回答也被考虑在内。

    【讨论】:

      【解决方案3】:

      当我尝试连接到 heroku cli 时,同样的错误发生在我身上,我只是阅读了代理的 heroku 配置,就是这种情况。通过配置 http 和 https 代理解决的问题,如

      set HTTP_PROXY=http://proxy.server.com:portnumber
      

      或设置 HTTPS_PROXY=https://proxy.server.com:portnumber

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-11
        • 2021-02-27
        • 2018-04-07
        • 2021-01-19
        • 2019-12-22
        • 1970-01-01
        • 2014-09-16
        • 2022-11-04
        相关资源
        最近更新 更多