Heroku:Javascript/MySQL项目因请求而崩溃
我有一个用JavaScript编写的Heroku API,可以从MySQL数据库读取数据。它以前可以工作,但现在每次我向API发送请求时,都会出现以下错误:Heroku:Javascript/MySQL项目因请求而崩溃,javascript,mysql,node.js,heroku,npm,Javascript,Mysql,Node.js,Heroku,Npm,我有一个用JavaScript编写的Heroku API,可以从MySQL数据库读取数据。它以前可以工作,但现在每次我向API发送请求时,都会出现以下错误: 2020-06-17T18:37:13.493711+00:00 app[web.1]: > my_api@0.0.0 start /app 2020-06-17T18:37:13.493712+00:00 app[web.1]: > node ./bin/www 2020-06-17T18:37:13.493712+00:00
2020-06-17T18:37:13.493711+00:00 app[web.1]: > my_api@0.0.0 start /app
2020-06-17T18:37:13.493712+00:00 app[web.1]: > node ./bin/www
2020-06-17T18:37:13.493712+00:00 app[web.1]:
2020-06-17T18:37:14.977800+00:00 heroku[web.1]: State changed from starting to up
2020-06-17T18:38:40.255982+00:00 app[web.1]: /app/node_modules/mysql2/lib/connection.js:149
2020-06-17T18:38:40.256022+00:00 app[web.1]: err.fatal = true;
2020-06-17T18:38:40.256023+00:00 app[web.1]: ^
2020-06-17T18:38:40.256023+00:00 app[web.1]:
2020-06-17T18:38:40.256026+00:00 app[web.1]: TypeError: Cannot create property 'fatal' on string 'SOCKS: Authentication failed'
2020-06-17T18:38:40.256027+00:00 app[web.1]: at Connection._handleFatalError (/app/node_modules/mysql2/lib/connection.js:149:15)
2020-06-17T18:38:40.256027+00:00 app[web.1]: at Connection._handleNetworkError (/app/node_modules/mysql2/lib/connection.js:169:10)
2020-06-17T18:38:40.256027+00:00 app[web.1]: at SocksConnection.emit (events.js:315:20)
2020-06-17T18:38:40.256029+00:00 app[web.1]: at /app/node_modules/socksjs/socks.js:146:18
2020-06-17T18:38:40.256029+00:00 app[web.1]: at Socket.dataReady (/app/node_modules/socksjs/socks.js:93:13)
2020-06-17T18:38:40.256029+00:00 app[web.1]: at Socket.emit (events.js:315:20)
2020-06-17T18:38:40.256030+00:00 app[web.1]: at emitReadable_ (_stream_readable.js:556:12)
2020-06-17T18:38:40.256030+00:00 app[web.1]: at processTicksAndRejections (internal/process/task_queues.js:83:21)
2020-06-17T18:38:40.263200+00:00 app[web.1]: npm ERR! code ELIFECYCLE
2020-06-17T18:38:40.263391+00:00 app[web.1]: npm ERR! errno 1
2020-06-17T18:38:40.264251+00:00 app[web.1]: npm ERR! my_api@0.0.0 start: `node ./bin/www`
2020-06-17T18:38:40.264354+00:00 app[web.1]: npm ERR! Exit status 1
2020-06-17T18:38:40.264471+00:00 app[web.1]: npm ERR!
所讨论的代码如下所示:
function new_db_connection() {
var sockConn = new SocksConnection(remote_options, sock_options);
var dbConnection = mysql.createConnection({
user: 'myusername',
database: 'mydatabase',
password: 'mypassword',
stream: sockConn
});
return [sockConn, dbConnection];
};
router.get('/myrequest', function(req, res, next) {
new_conn = new_db_connection();
dbConnection = new_conn[1];
sockConn = new_conn[0];
dbConnection.query('SELECT * from mytable', function(error, results, fields) {
if (error) {
res.send(JSON.stringify({
"status": 500,
"error": error,
"response": null
}));
//If there is error, we send the error in the error section with 500 status
} else {
res.send(JSON.stringify({
"status": 200,
"error": null,
"response": results
}));
//If there is no error, all is good and response is 200OK.
}
sockConn.dispose();
});
dbConnection.end()
});
我在这里看到了一个类似的问题,解决方法是关闭连接,但每次请求后我都会关闭连接,所以我不知道问题出在哪里
感谢所有帮助。尝试更改此设置
sockConn.dispose();
});
dbConnection.end()
});
在这个
sockConn.dispose();
dbConnection.end()
});
});
编辑:阅读错误更好,可能是其他地方的问题
查看字符串'SOCKS:Authentication failed'
,是您还是SocksConnection
远程端点更改了身份验证中的某些内容
希望这有帮助。尝试更改此设置
sockConn.dispose();
});
dbConnection.end()
});
在这个
sockConn.dispose();
dbConnection.end()
});
});
编辑:阅读错误更好,可能是其他地方的问题
查看字符串'SOCKS:Authentication failed'
,是您还是SocksConnection
远程端点更改了身份验证中的某些内容
希望这有帮助。您应该看看@daniele Rici提供的答案,您需要正确结束连接;但是,解决这个问题并不能解决最初的问题 问题不在于你的代码您的问题在于连接配置 字符串“SOCKS:身份验证失败”上的“致命” 表示身份验证出现错误
var sockConn = new SocksConnection(remote_options, sock_options);
假设您使用的是来自的npm软件包socksjs
据文件记载,初始化sockjs连接的正确方法是执行以下操作:
var sock = new SocksConnection(remote_options, sock_options);
var sock = SocksConnection.connect(remote_options, sock_options, connect_handler);
您应该看看@daniele Rici提供的答案,您需要正确结束连接;但是,解决这个问题并不能解决最初的问题 问题不在于你的代码您的问题在于连接配置 字符串“SOCKS:身份验证失败”上的“致命” 表示身份验证出现错误
var sockConn = new SocksConnection(remote_options, sock_options);
假设您使用的是来自的npm软件包socksjs
据文件记载,初始化sockjs连接的正确方法是执行以下操作:
var sock = new SocksConnection(remote_options, sock_options);
var sock = SocksConnection.connect(remote_options, sock_options, connect_handler);
我已将其分解以进行调试,并且它确实连接到数据库,没有任何问题-当我将查询发送到数据库时会引发错误。我尝试在
dbConnection.end()之后放置console.log
,但它确实显示了,所以现在我都不知道该怎么想,但你有没有尝试过我在编辑@JessicaChambers之前提出的更改?我尝试过,但没有什么不同我已经将其分解以调试它,它确实连接到数据库没有任何问题-当我将查询发送到数据库时会抛出错误。我尝试在dbConnection.end()
之后放置一个console.log
,它确实出现了,所以现在我甚至不知道该怎么想,但你尝试过我在编辑@Jessicambers之前提出的更改吗?我尝试过,但这没什么区别为什么你要用SocksConnection?你能用一种传统的方法进行测试以验证问题是否出在socks上吗?我正在使用一个第三方工具,该工具提供访问数据库所需的IP地址。错误似乎出现在Socket.dataReady(/app/node_modules/socksjs/socks.js:93:13)。可能是由于当前检索数据库参数的延迟,因此mysql客户端无法建立连接代码>&sockConn=new_conn[0]
在查询之前,如果您尝试在控制台上同时记录dbConnection
和sockConn
,会得到什么结果。events.js:315
?它试图对字符串调用\u handleNetworkError
,但该函数需要一个错误对象。解决该问题后,您将更容易判断身份验证错误的来源。另外,SocksConnection
的源代码在哪里?为什么要使用SocksConnection?你能用一种传统的方法进行测试以验证问题是否出在socks上吗?我正在使用一个第三方工具,该工具提供访问数据库所需的IP地址。错误似乎出现在Socket.dataReady(/app/node_modules/socksjs/socks.js:93:13)。可能是由于当前检索数据库参数的延迟,因此mysql客户端无法建立连接代码>&sockConn=new_conn[0]
在查询之前,如果您尝试在控制台上同时记录dbConnection
和sockConn
,会得到什么结果。events.js:315
?它试图对字符串调用\u handleNetworkError
,但该函数需要一个错误对象。解决该问题后,您将更容易判断身份验证错误的来源。另外,SocksConnection
的源代码在哪里?