节点js + Mysql:无法排队,因为致命的错误

我运行一个应用程序与节点js(更具体地表示js),我保存一些数据与MySQL客户端。

它完美的工作了一段时间没有问题,但所有的suddden我得到这些erros:

跟踪:无法排队致命错误后退出。 在Protocol._enqueue(C:\ nodejs \ 12-coiffure \ node_modules \ mysql \ lib \)下的Protocol._validateEnqueue(C:\ nodejs \ 12-coiffure \ node_modules \ mysql \ lib \ protocol \ Protocol.js:218:11) (C:\ nodejs \ 12-coiffure \ node_modules \ mysql \ lib \ protocol \ Protocol.js:88:23)在PoolConnection.end(Protocol \ PoolConnection._removeFromPool上的Pool._purgeConnection(C:\ nodejs \ 12-coiffure \ node_modules \ mysql \ lib \ Pool.js:259:16) (C:\ nodejs \ 12-coiffure \ node_modules \ mysql \ lib \ PoolConnection.js:70:8)。 在PoolConnection上的PoolConnection.emit(events.js:169:7)上的emitOne(events.js:77:13)处,使用以下命令(C:\ nodejs \ 12-coiffure \ node_modules \ mysql \ lib \ PoolConnection.js:29:12) .Connection._handleProtocolError(C:\ nodejs \ 12-coiffure \ node_modules \ mysql \ lib \ Connection.js:439:8)跟踪:在致命错误后无法排队查询。 在Protocol._enqueue(C:\ nodejs \ 12-coiffure \ node_modules \ mysql \ lib \)下的Protocol._validateEnqueue(C:\ nodejs \ 12-coiffure \ node_modules \ mysql \ lib \ protocol \ Protocol.js:218:11)在Object.fetchDatas(C:\ nodejs \ twelve-node)上的PoolConnection.query(C:\ nodejs \ 12-coiffure \ node_modules \ mysql \ lib \ Connection.js:214:25) (C:\ nodejs \ 12-coiffure \ public \ javascripts \ twelvebase.js:94:12)在C:\ nodejs \ 12-ciffure \ routes \ index.js:7:7 (C:\ nodejs \ 12-coiffure \ node_modules \ express \ lib \ router \ route.js:131:13)在Route.dispatch(\ node_modules \ express \ lib \ router \ layer.js:95: C:\ nodejs \ 12-coiffure \ node_modules \ express \ lib \ router \ route.js:112:3)在Layer.handle [handle_request](C:\ nodejs \ 12-coiffure \ node_modules \ express \ lib \ router \ layer.js:95:5)在C:\ nodejs \ 12-coiffure \ node_modules \ express \ lib \ router \ index.js:277:22 C:\ nodejs \ 12-coiffure \ public \ javascripts \ twelvebase.js :26投掷(留言); ^

错误:致命错误后无法排队查询。 在Protocol._enqueue(C:\ nodejs \ 12-coiffure \ node_modules \ mysql \ lib \)下的Protocol._validateEnqueue(C:\ nodejs \ 12-coiffure \ node_modules \ mysql \ lib \ protocol \ Protocol.js:199:16)在Object.fetchDatas(C:\ nodejs \ twelve-node)上的PoolConnection.query(C:\ nodejs \ 12-coiffure \ node_modules \ mysql \ lib \ Connection.js:214:25) (C:\ nodejs \ 12-coiffure \ public \ javascripts \ twelvebase.js:94:12)在C:\ nodejs \ 12-ciffure \ routes \ index.js:7:7 (C:\ nodejs \ 12-coiffure \ node_modules \ express \ lib \ router \ route.js:131:13)在Route.dispatch(\ node_modules \ express \ lib \ router \ layer.js:95: C:\ nodejs \ 12-coiffure \ node_modules \ express \ lib \ router \ route.js:112:3)在Layer.handle [handle_request](C:\ nodejs \ 12-coiffure \ node_modules \ express \ lib \ router \ layer.js:95:5)在C:\ nodejs \ 12-coiffure \ node_modules \ express \ lib \ router \ index.js:277:22

问题是,我真的无法find问题的来源,我甚至不知道为什么有时在作品中,有时甚至不知道。

这里是我的代码来启动数据库:

var mysql = require('mysql'); var dbPool = mysql.createPool({ connectionLimit: 50, waitForConnections: true, queueLimit: 0, host: '*my host*', user: '*me*', password: '*my password*', database: '*heroku database*', wait_timeout:28800, connect_timeout:10, debug:true }); dbPool.getConnection(function(err, connection) { if (err) throw (err); var db = connection; fetchDatas = function(callback) { // openDatabase(); var servicesFemmes, servicesHommes, products; db.query("SELECT * FROM servicesFemmes", function(err, servicesFemmes, fields) { if (err) { callback(sendError(err)); } else { db.query("SELECT * FROM servicesHommes", function(err, servicesHommes, fields) { if (err) { callback(sendError(err)); } else { db.query("SELECT * FROM produits", function(err, products, fields) { if (err) { callback(sendError(err)); } else { db.query("SELECT * FROM carousel", function(err, carousel, fields) { if (err) { callback(sendError(err)); } else { callback(null, servicesFemmes, servicesHommes, products, carousel); } }); } }); } }); } }); } } } 

当然,我从另一个文件调用fetchDatas()来获取所有的数据显示。

我真的迷失了,一直在寻找解决scheme超过4个小时在每个现有的论坛..请帮助我,并提前感谢你。

最后,我抛出了普通的MYSQL,而是使用了Sequelize。 这是我的代码(最终工作):

 var mysql = require('mysql'); var Sequelize = require('sequelize'); var sequelize = new Sequelize('database name', 'username', 'password', { host: 'your host url', dialect: 'mysql', pool: { max: 10, min: 0, idle: 3000 } }); //Models' creation var servicesHommes = sequelize.define('servicesHommes', { nom: { type: Sequelize.STRING, field: 'nom' }, cheveuxLongs: { type: Sequelize.STRING, field: 'cheveuxLongs' }, cheveuxCourts: { type: Sequelize.STRING, field: 'cheveuxCourts' } }, { freezeTableName: true }); var servicesFemmes = sequelize.define('servicesFemmes', { nom: { type: Sequelize.STRING, field: 'nom' }, cheveuxLongs: { type: Sequelize.STRING, field: 'cheveuxLongs' }, cheveuxCourts: { type: Sequelize.STRING, field: 'cheveuxCourts' } }, { freezeTableName: true }); var carousel = sequelize.define('carousel', { photo: { type: Sequelize.STRING, field: 'photo' } }); var produits = sequelize.define('produits', { marque: { type: Sequelize.STRING, field: 'marque' }, nom: { type: Sequelize.STRING, field: 'nom' }, photo: { type: Sequelize.STRING, field: 'photo' } }, { freezeTableName: true }); synchronizeBdd = function(callback) { sequelize.sync().then(function() { //any function querying the database should be placed here in this callback fetchDatas = function(callback) { servicesFemmes.findAll().then(function(femmes) { servicesHommes.findAll().then(function(hommes) { produits.findAll().then(function(products) { carousel.findAll().then(function(carousels) { callback(null, femmes, hommes, products, carousels); }) }) }) }); } //end of sync() exports.fetchDatas = fetchDatas; callback(); }); } exports.synchronize = synchronizeBdd; 

然后我有另一个文件调用我的函数“同步”导出在最后一行代码(“exports.synchronize = synchronizeBdd”):

 var bdd = require('fileWithSequelizeInstantiation') bdd.synchronize(function() { //here I call the functions related to my database. In my case: bdd.fetchDatas() })