【问题标题】:Node.js application on localhost crashes本地主机上的 Node.js 应用程序崩溃
【发布时间】:2017-01-05 16:38:47
【问题描述】:

背景:

我有一个 node.js + Express + MySQL 应用程序。对于开发和测试,我在我的本地主机上运行它,我还将它部署在生产端的 heroku 上。

问题:

每当我在本地主机上运行应用程序时,只要我在登录表单中点击登录按钮,它就会崩溃。具体来说,它给出了以下错误:

TypeError: 无法调用未定义的“查询”方法

这个问题与我用来连接数据库的mysql节点模块有关,代码如下:

connectionPool.getConnection(function(err, connection){
        if(err) {
            winston.log('debug', '------------------------------------ Error: ' + err);
            callback(err, null);
        }
        connection.query(queryString, function(err, rows){
            if (err) {
                winston.log('debug', '------------------------------------ Error: ' + err);
                callback(err, null);
            }
            connection.release();
            callback(null, rows);
        });
    });

显然,连接参数未定义,因此出现错误。

但在我们得出问题是我的代码问题的结论之前,应用程序有时也可以顺利运行。它在 Heroku prod 网站上运行顺畅,猜猜如果我将我的 wifi 连接从我的家庭 wifi 更改为我的便携式 wifi 热点它永远不会崩溃。

因此,如果我在家庭 wifi 上运行我的服务器 10 次,它将失败 8 次并顺利运行 2 次。所以每次我必须在这个项目上工作时,我都必须将我的笔记本电脑重新连接到我的便携式 wifi 热点(这非常昂贵)。

我尝试将代码中的端口从 8000 更改为 3434 或 5000,但没有帮助。我真的很沮丧,因为由于我的家庭连接,我什至无法在 locahost 上测试我的应用程序。我有 4 mbps 的下载速度,对于这样的应用程序来说应该足够了。 YouTube、Facebook 等其他网站也可以正常加载(更不用说当我在 heroku 上运行同一个应用程序时)。

这个问题有什么解决办法吗?是我的代码无法连接吗?

谢谢。

【问题讨论】:

    标签: mysql node.js heroku


    【解决方案1】:

    您应该在callback(err, null); 之后立即在您的getConnection() 回调中添加一个return;。这将阻止在发生错误时继续执行。

    您不想为 query() 回调添加类似的内容,因为无论如何释放连接回池很重要。

    【讨论】:

    • 刚刚按照您的建议修改了代码,但服务器仍然崩溃。但是这次它确实让我登录了,然后重定向到下一页,然后在那里崩溃(给出相同的错误)
    • 它在同一行还是在不同的地方崩溃了?
    猜你喜欢
    • 1970-01-01
    • 2012-01-28
    • 2013-07-01
    • 1970-01-01
    • 2019-05-15
    • 2020-12-22
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多