mysql - 本地主机上的 Node.js 应用程序崩溃

标签 mysql node.js heroku

背景:

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

问题:

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

TypeError: Cannot call method 'query' of undefined

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

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 上运行该应用程序时)。

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

谢谢。

最佳答案

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

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

关于mysql - 本地主机上的 Node.js 应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41480310/

相关文章:

mysql - 如何从mysql表的前3行中获取最小值

java - 未配置连接

mysql - 无法使用临时表添加或更新子行错误?

javascript - 在 Node.js 中使用 Oimo.js 物理引擎(Oimo.js 是前端引擎)

node.js - 如何在运行时获取nodejs可执行文件的路径

java - 有没有办法将 MySql TIMESTAMP 映射到 java.lang.Long?

javascript - Loopback/SQL中如何查询相关模型的个数?

ruby-on-rails - Heroku 应用程序似乎从错误的 Git 存储库/分支中提取

ios - 无法在 iPhone 上滚动 heroku 维护页面

java - 在本地运行 Heroku Java 教程时 Tomcat 未启动; "A child container failed during start"找不到 webapp 路径