背景:
我有一个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/