我正在運行一個帶有節點js(更具體地說是js)的應用程序,並使用mysql客戶端保存了一些數據。Node js + Mysql:無法入隊,因爲致命錯誤
它完美地工作了一段時間,沒有問題,但隨後suddden的我得到這些錯誤回報:
Trace: Cannot enqueue Quit after fatal error. at Protocol._validateEnqueue (C:\nodejs\twelve-coiffure\node_modules\mysql\lib\protocol\Protocol.js:218:11) at Protocol._enqueue (C:\nodejs\twelve-coiffure\node_modules\mysql\lib\protocol\Protocol.js:135:13) at Protocol.quit (C:\nodejs\twelve-coiffure\node_modules\mysql\lib\protocol\Protocol.js:88:23) at PoolConnection.end (C:\nodejs\twelve-coiffure\node_modules\mysql\lib\Connection.js:255:18) at Pool._purgeConnection (C:\nodejs\twelve-coiffure\node_modules\mysql\lib\Pool.js:259:16) at PoolConnection._removeFromPool (C:\nodejs\twelve-coiffure\node_modules\mysql\lib\PoolConnection.js:70:8) at PoolConnection. (C:\nodejs\twelve-coiffure\node_modules\mysql\lib\PoolConnection.js:29:12) at emitOne (events.js:77:13) at PoolConnection.emit (events.js:169:7) at PoolConnection.Connection._handleProtocolError (C:\nodejs\twelve-coiffure\node_modules\mysql\lib\Connection.js:439:8) Trace: Cannot enqueue Query after fatal error. at Protocol._validateEnqueue (C:\nodejs\twelve-coiffure\node_modules\mysql\lib\protocol\Protocol.js:218:11) at Protocol._enqueue (C:\nodejs\twelve-coiffure\node_modules\mysql\lib\protocol\Protocol.js:135:13) at PoolConnection.query (C:\nodejs\twelve-coiffure\node_modules\mysql\lib\Connection.js:214:25) at Object.fetchDatas (C:\nodejs\twelve-coiffure\public\javascripts\twelvebase.js:94:12) at C:\nodejs\twelve-coiffure\routes\index.js:7:7 at Layer.handle [as handle_request] (C:\nodejs\twelve-coiffure\node_modules\express\lib\router\layer.js:95:5) at next (C:\nodejs\twelve-coiffure\node_modules\express\lib\router\route.js:131:13) at Route.dispatch (C:\nodejs\twelve-coiffure\node_modules\express\lib\router\route.js:112:3) at Layer.handle [as handle_request] (C:\nodejs\twelve-coiffure\node_modules\express\lib\router\layer.js:95:5) at C:\nodejs\twelve-coiffure\node_modules\express\lib\router\index.js:277:22 C:\nodejs\twelve-coiffure\public\javascripts\twelvebase.js:26 throw(message); ^
Error: Cannot enqueue Query after fatal error. at Protocol._validateEnqueue (C:\nodejs\twelve-coiffure\node_modules\mysql\lib\protocol\Protocol.js:199:16) at Protocol._enqueue (C:\nodejs\twelve-coiffure\node_modules\mysql\lib\protocol\Protocol.js:135:13) at PoolConnection.query (C:\nodejs\twelve-coiffure\node_modules\mysql\lib\Connection.js:214:25) at Object.fetchDatas (C:\nodejs\twelve-coiffure\public\javascripts\twelvebase.js:94:12) at C:\nodejs\twelve-coiffure\routes\index.js:7:7 at Layer.handle [as handle_request] (C:\nodejs\twelve-coiffure\node_modules\express\lib\router\layer.js:95:5) at next (C:\nodejs\twelve-coiffure\node_modules\express\lib\router\route.js:131:13) at Route.dispatch (C:\nodejs\twelve-coiffure\node_modules\express\lib\router\route.js:112:3) at Layer.handle [as handle_request] (C:\nodejs\twelve-coiffure\node_modules\express\lib\router\layer.js:95:5) at C:\nodejs\twelve-coiffure\node_modules\express\lib\router\index.js:277:22
的問題是,我真的找不到在哪裏這個問題來自於我的代碼,並我甚至不知道爲什麼有時在作品中,有時甚至不在。
這裏是我的代碼來啓動數據庫:
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()從另一個文件把所有的DATAS顯示。
我真的迷路了,一直在尋找解決方案超過4個小時在每個現有的論壇..請幫助我,並提前感謝你。
你可能想在這裏使用一個承諾庫,像[Sequelize](http://sequelizejs.com)提供的那樣,因爲這已經在「回調地獄」中。 – tadman
你有沒有釋放連接,以便它可以在池中重新使用? + db對象從哪裏來?不應該是連接對象嗎? –
ok @tadman如果我在這裏找不到解決方案,我很可能會很快使用它。我只是想保持簡單(我已經從sqlite3開始,但它與heroku主機不兼容),因爲這對於小商店來說是一個簡單的頁面。 –