PCJ上的Nodejs Mariadb超时未触发mariadb事件

我在PCF上连接到mariadb实例上有一个nodejs应用程序。实例wait_timeout为600,因此在闲置后10分钟后将断开连接。PCJ上的Nodejs Mariadb超时未触发mariadb事件

在我的本地机器上运行此应用程序并连接到MariaDB的本地实例上泊坞窗(一旦超时命中或当我杀死连接),我会得到一个MySQL Server has gone away然后我的应用程序将重新连接,并给我的数据库的结果。它不会在本地崩溃。

当PCF运行这个MariaDB的错误会导致应用程序崩溃或者异常被捕获就会死机并发送Headers already sent error

我认为,一旦MariaDB的杀死连接不知何故在节点MariaDB的驱动程序不通知即使我在连接上有事件处理程序,连接也被终止。因此,一旦我的应用程序尝试运行查询,它会失败,因为事件没有被触发,并试图在关闭的连接上运行它。

我的连接模块

// Loading local .env vars 

var route_helper = require("./route_helper");

route_helper.loadLocalEnvVars();

var Client = require('mariasql');

var moment = require('moment');

var connection = null;

try{

connection = new Client({

host: process.env.DB_MARIA_HOST,

user: process.env.DB_MARIA_USER,

password: process.env.DB_MARIA_PASS,

db: process.env.DB_MARIA_SCHEMA,

port: parseInt(process.env.DB_MARIA_PORT),

connTimeout: 20,

pingInterval: 1,

compress: true

});

connection.connect(function(err){

if(!err) {

if(process.env.DEBUG == "true"){

console.log("Database is connected");

}

} else {

console.log("Error connecting database " + err.message);

console.log(err);

}

});

connection.on('ready',function(){

if(process.env.DEBUG == "true"){

console.log("Connection ready " + moment().format('MMMM Do YYYY, h:mm:ss a'))

}

});

connection.on('close',function(){

if(process.env.DEBUG == "true"){

console.log("Connection closed " + moment().format('MMMM Do YYYY, h:mm:ss a'))

}

});

connection.on('error',function(err){

if(process.env.DEBUG == "true"){

console.log("Connection timeout... Reconnecting")

console.log(err);

}

if(err.code == 2006){

this.connect();

}

//this.connect();

});

}catch(err){

console.log("Maria_db error")

console.log(err)

throw err;

}

module.exports = connection;

加载服务器路由器

var routes = require("./routes/application.js").appRouter(server); 

var server = server.listen(process.env.PORT, function() {

console.log("Listening on port %s...", server.address().port);

});

我的路线

app.get("/applications", function (req, res) { 

try{

var applications;

var dbConn = require("../util/db.js");

dbConn.query('SELECT some stuff’, function (error, results) {

if(!error) {

applications = {

"apps": results

}

return res.send(applications);

} else {

return res.send({"status": "error", "message": error.code});

}

});

}catch(err) {

console.log(err)

}

});

MySQL已经走了错误

2017-12-20T09:03:55.29-0500 [APP/PROC/WEB/0] OUT { Error: MySQL server has gone away 

2017-12-20T09:03:55.29-0500 [APP/PROC/WEB/0] OUT at /home/vcap/app/node_modules/mariasql/lib/Client.js:223:12

2017-12-20T09:03:55.29-0500 [APP/PROC/WEB/0] ERR at Client.<anonymous> (/home/vcap/app/util/dbHealth.js:14:9)

2017-12-20T09:03:55.29-0500 [APP/PROC/WEB/0] ERR at emitOne (events.js:101:20)

2017-12-20T09:03:55.29-0500 [APP/PROC/WEB/0] ERR at Client.emit (events.js:191:7)

2017-12-20T09:03:55.29-0500 [APP/PROC/WEB/0] ERR at Client._onerror (/home/vcap/app/node_modules/mariasql/lib/Client.js:395:10)

2017-12-20T09:03:55.29-0500 [APP/PROC/WEB/0] ERR at Client._processQueue (/home/vcap/app/node_modules/mariasql/lib/Client.js:614:18)

2017-12-20T09:03:55.29-0500 [APP/PROC/WEB/0] ERR at /home/vcap/app/node_modules/mariasql/lib/Client.js:223:12

2017-12-20T09:03:55.29-0500 [APP/PROC/WEB/0] ERR at process._tickCallback (internal/process/next_tick.js:104:9)

2017-12-20T09:03:55.31-0500 [APP/PROC/WEB/0] ERR npm ERR! Exit status 1

2017-12-20T09:03:55.31-0500 [APP/PROC/WEB/0] ERR npm ERR! Failed at the [email protected] start script 'node server.js'.

2017-12-20T09:03:55.31-0500 [APP/PROC/WEB/0] ERR npm ERR! not with npm itself.

2017-12-20T09:03:55.31-0500 [APP/PROC/WEB/0] ERR npm ERR! You can get information on how to open an issue for this project with:

2017-12-20T09:03:55.31-0500 [APP/PROC/WEB/0] ERR npm ERR! npm bugs myapplication

2017-12-20T09:03:55.31-0500 [APP/PROC/WEB/0] ERR npm ERR! Or if that isn't available, you can get their info via:

2017-12-20T09:03:55.31-0500 [APP/PROC/WEB/0] ERR npm ERR! npm owner ls myapplication

2017-12-20T09:03:55.33-0500 [APP/PROC/WEB/0] ERR npm ERR! Please include the following file with any support request:

2017-12-20T09:03:55.33-0500 [APP/PROC/WEB/0] ERR npm ERR! /home/vcap/app/.npm/_logs/2017-12-20T14_03_55_316Z-debug.log

标题已发送错误。他们似乎也没有秩序,这很奇怪。在此测试期间,我向3个不同的服务发送3个http请求并获取此错误。

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT  at _combinedTickCallback (internal/process/next_tick.js:131:7) 

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at Client._processQueue (/home/vcap/app/node_modules/mariasql/lib/Client.js:614:18)

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at process._tickCallback (internal/process/next_tick.js:180:9) code: 2006 }

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR _http_outgoing.js:494

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR at validateHeader (_http_outgoing.js:494:11)

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR at ServerResponse.send (/home/vcap/app/node_modules/express/lib/response.js:158:21)

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR at Object.cb (/home/vcap/app/routes/application.js:474:29)

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at Client._processQueue (/home/vcap/app/node_modules/mariasql/lib/Client.js:614:18)

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at _combinedTickCallback (internal/process/next_tick.js:131:7)

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at process._tickCallback (internal/process/next_tick.js:180:9) code: 2006 }

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR throw new Error('Can\'t set headers after they are sent.');

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR Error: Can't set headers after they are sent.

2017-12-27T11:07:46.41-0500 [APP/PROC/WEB/0] OUT Connection timeout... Reconnecting

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at /home/vcap/app/node_modules/mariasql/lib/Client.js:223:12

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT { Error: MySQL server has gone away

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT { Error: MySQL server has gone away

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at _combinedTickCallback (internal/process/next_tick.js:131:7)

2017-12-27T11:07:46.41-0500 [APP/PROC/WEB/0] OUT Route: /applications

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT { Error: MySQL server has gone away

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at Client._processQueue (/home/vcap/app/node_modules/mariasql/lib/Client.js:614:18)

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at /home/vcap/app/node_modules/mariasql/lib/Client.js:223:12

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR at ServerResponse.setHeader (_http_outgoing.js:501:3)

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR at ServerResponse.header (/home/vcap/app/node_modules/express/lib/response.js:767:10)

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at process._tickCallback (internal/process/next_tick.js:180:9) code: 2006 }

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] OUT at /home/vcap/app/node_modules/mariasql/lib/Client.js:223:12

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR ^

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR at ServerResponse.send (/home/vcap/app/node_modules/express/lib/response.js:170:12)

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR at ServerResponse.json (/home/vcap/app/node_modules/express/lib/response.js:267:15)

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR at cleanupReqs (/home/vcap/app/node_modules/mariasql/lib/Client.js:744:11)

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR at Client._onclose (/home/vcap/app/node_modules/mariasql/lib/Client.js:574:5)

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR at Client._onerror (/home/vcap/app/node_modules/mariasql/lib/Client.js:396:10)

2017-12-27T11:07:46.43-0500 [APP/PROC/WEB/0] ERR npm ERR! Failed at the [email protected] start script.

2017-12-27T11:07:46.42-0500 [APP/PROC/WEB/0] ERR npm ERR! code ELIFECYCLE

2017-12-27T11:07:46.43-0500 [APP/PROC/WEB/0] ERR npm ERR!

2017-12-27T11:07:46.43-0500 [APP/PROC/WEB/0] ERR npm ERR! [email protected] start: `node server.js`

2017-12-27T11:07:46.43-0500 [APP/PROC/WEB/0] ERR npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

2017-12-27T11:07:46.43-0500 [APP/PROC/WEB/0] ERR npm ERR! Exit status 1

2017-12-27T11:07:46.43-0500 [APP/PROC/WEB/0] ERR npm ERR! errno 1

2017-12-27T11:07:46.43-0500 [APP/PROC/WEB/0] ERR npm ERR! A complete log of this run can be found in:

2017-12-27T11:07:46.43-0500 [APP/PROC/WEB/0] ERR npm ERR! /home/vcap/app/.npm/_logs/2017-12-27T16_07_46_432Z-debug.log

编辑:用招摇

回答:

我只从mariasql NPM驾驶员切换到knex驱动器产生本申请的结构。即使knex的依赖关系有mariasql: '^0.2.3',但它的工作原理没有问题。

以上是 PCJ上的Nodejs Mariadb超时未触发mariadb事件 的全部内容, 来源链接: utcz.com/qa/265925.html

回到顶部