Heroku:Javascript/MySQL项目因请求而崩溃

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

我有一个用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 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
的源代码在哪里?