Express-MySQL conn.end()未运行(调用quit后无法排队)
我已经读过这篇文章了,Express-MySQL conn.end()未运行(调用quit后无法排队),mysql,node.js,express,passport.js,Mysql,Node.js,Express,Passport.js,我已经读过这篇文章了,conn.end()在我的查询块中 我的问题是我的dashboard.js中的conn.end不工作,导致应用程序中断,出现以下错误 我需要使用它,因为MySQL连接正在淹没系统,直到数据库停止接受更多的连接,因为每次使用时它们都保持打开状态 在这篇文章中,我将只使用我的NodeJS应用程序的几个路由中的一个(dashboard.js) `Event.js` is not a part of my working files, probably is a file from
conn.end()
在我的查询块中
我的问题是我的dashboard.js
中的conn.end
不工作,导致应用程序中断,出现以下错误
我需要使用它,因为MySQL连接正在淹没系统,直到数据库停止接受更多的连接,因为每次使用时它们都保持打开状态
在这篇文章中,我将只使用我的NodeJS应用程序的几个路由中的一个(dashboard.js
)
`Event.js` is not a part of my working files, probably is a file from `./node_modules`
|events.js:183
throw er; // Unhandled 'error' event
^
Error: Cannot enqueue Quit after invoking quit.
at Protocol._validateEnqueue (E:\NodeJS\Project-Change\node_modules\mysql\lib\protocol\Protocol.js:204:16)
at Protocol._enqueue (E:\NodeJS\Project-Change\node_modules\mysql\lib\protocol\Protocol.js:139:13)
at Protocol.quit (E:\NodeJS\Project-Change\node_modules\mysql\lib\protocol\Protocol.js:92:23)
at Connection.end (E:\NodeJS\Project-Change\node_modules\mysql\lib\Connection.js:249:18)
at ServerResponse.res.end (E:\NodeJS\Project-Change\node_modules\express-myconnection\lib\express-myconnection.js:114:54)
at ServerResponse.send (E:\NodeJS\Project-Change\node_modules\express\lib\response.js:191:8)
at fn (E:\NodeJS\Project-Change\node_modules\express\lib\response.js:896:10)
at View.exports.renderFile [as engine] (E:\NodeJS\Project-Change\node_modules\ejs\lib\ejs.js:323:3)
at View.render (E:\NodeJS\Project-Change\node_modules\express\lib\view.js:76:8)
at Function.app.render (E:\NodeJS\Project-Change\node_modules\express\lib\application.js:527:10)
at ServerResponse.res.render (E:\NodeJS\Project-Change\node_modules\express\lib\response.js:900:7)
at Query._callback (E:\NodeJS\Project-Change\routes\dashboard.js:39:17)
at Query.Sequence.end (E:\NodeJS\Project-Change\node_modules\mysql\lib\protocol\sequences\Sequence.js:88:24)
at Query._handleFinalResultPacket (E:\NodeJS\Project-Change\node_modules\mysql\lib\protocol\sequences\Query.js:139:8)
at Query.EofPacket (E:\NodeJS\Project-Change\node_modules\mysql\lib\protocol\sequences\Query.js:123:8)
at Protocol._parsePacket (E:\NodeJS\Project-Change\node_modules\mysql\lib\protocol\Protocol.js:279:23)
app.js(仅限相对行)
路由/dashboard.js(路由)
config/db.js
config/passport.js
需要外部演示以备不时之需在运行带有connection.end.的“try/catch”块之前,请检查连接是否打开。我在
req.getConnection(function(err,conn){console.log(conn.state,conn.threadId)之后插入了dashboard.js
,然后检查连接是否打开…
-结果:authenticated 2856
-但是,如果有问题,dashboard.js
路由是在用户登录后呈现的初始页面in@numbtongue关于您的建议的完整代码,谢谢..不要在进程结束后调用connection.end,您可以在..@numbtha之前尝试调用它谢谢。我也试过了,没有结果,实际上没有坏结果,也没有好结果,就像它被忽略了一样。我还试着在查询之前放置conn.connect()
,但是这样,错误变为-在握手排队后无法排队
var express = require('express'),
path = require('path'),
bodyParser = require('body-parser'),
app = express(),
expressValidator = require('express-validator'),
session = require('express-session'),
passport = require('passport'),
flash = require('connect-flash'),
passportConfig = require('./config/passport'),
dbConfig = require('./config/db');
// skipping code about static files, bodyparser, expressValidator, session, passport
passportConfig(passport)
/*MySQL connection*/
var connection = require('express-myconnection'),
mysql = require('mysql');
app.use(
connection(mysql, dbConfig,'request')
);
var dashboard = require('./routes/dashboard.js'); // in this route I apply conn.end()
var router = require('./routes/rates.js');
// skipping app.post/app.get code for /login & /logout & isLoggedIn middleware
app.use('/', router);
app.use('/', dashboard); // issue on that
app.get('/',function(req,res){
res.render('./dashboard.ejs'); //issue on that
});
module.exports = app;
var express = require('express');
var router = express.Router();
var dashboard = express.Router();
dashboard.use(function(req, res, next) {
console.log(req.method, req.url);
next();
});
var dashboard = router.route('/');
//show the CRUD interface | GET
dashboard.get(function(req,res,next){
req.getConnection(function(err,conn){
if (err) return next("Cannot Connect");
var query = conn.query('SELECT SUM(total_price) AS transactions_total FROM transactions WHERE date_created = CURDATE(); SELECT SUM(total_profit) AS total_profit FROM transactions', function(err,rows){
if(err){
console.log(err);
return next("MySQL error, check your query");
}
var ab = {data:rows[0]};
var total_profit = {data:rows[1]};
res.render('dashboard',{ab, total_profit});
conn.end(); // causes the described error
});
// conn.end(); even tried here
});
});
dashboard.all(function(req,res,next){
console.log("route for dashboard executed");
console.log(req.params);
next();
});
module.exports = router;
console.log('dashboard.js loaded!');
module.exports = {
host : 'localhost',
user : 'root',
password : '',
database : 'mydb',
multipleStatements: true,
debug : false
}