[英]Node.js & MySQL: HTTP server stops after first run
I'm using node-mysql. 我正在使用node-mysql。 Below codes taken from http://blog.josedacruz.com/2013/07/19/learning-node-js-using-mysql/ 以下代码取自http://blog.josedacruz.com/2013/07/19/learning-node-js-using-mysql/
var http = require('http');
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
port : 3306,
database: 'aaa',
user : 'root',
password : 'z'
});
http.createServer(function(req, res){
res.writeHeader(200);
res.write('Connect to mySql\n');
// Connect to mySql (if there is an erro, report it and terminate de request)
connection.connect(function(err){
if(err != null) {
res.end('Error connecting to mysql:' + err+'\n');
}
});
connection.query("SELECT value FROM variable WHERE name = 'site_name'", function(err, rows){
if(err != null) {
res.end("Query error:" + err);
} else {
// Shows the result on console window
console.log(rows[0]);
res.end("Success!");
}
// Close connection
connection.end();
});
}).listen(80);
First thing first, I feel strange the connection.end
not same level with connection.connect
首先,我对connection.end
与connection.connect
级别不同感到奇怪
I've tried change the connection
to be same level and also put on different place, but still no luck 我试过将connection
更改为同一级别,并放置在不同的位置,但是仍然没有运气
Below is the error in terminal when HTTP server stops after first run (note: MyTube
is the result of query) 以下是HTTP服务器在首次运行后停止时终端中的错误(注意: MyTube
是查询的结果)
{ value: 'MyTube' }
Error: Cannot enqueue Quit after invoking quit.
at Protocol._validateEnqueue (/home/mydir/node/node_modules/mysql/lib/protocol/Protocol.js:131:16)
at Protocol._enqueue (/home/mydir/node/node_modules/mysql/lib/protocol/Protocol.js:98:13)
at Protocol.quit (/home/mydir/node/node_modules/mysql/lib/protocol/Protocol.js:61:36)
at Connection.end (/home/mydir/node/node_modules/mysql/lib/Connection.js:155:18)
at Query._callback (/home/mydir/node/app.js:31:20)
at Query.Sequence.end (/home/mydir/node/node_modules/mysql/lib/protocol/sequences/Sequence.js:75:24)
at Protocol._validateEnqueue (/home/mydir/node/node_modules/mysql/lib/protocol/Protocol.js:153:6)
at Protocol._enqueue (/home/mydir/node/node_modules/mysql/lib/protocol/Protocol.js:98:13)
at Connection.query (/home/mydir/node/node_modules/mysql/lib/Connection.js:140:25)
at Server.<anonymous> (/home/mydir/node/app.js:22:16)
--------------------
at Quit.Sequence (/home/mydir/node/node_modules/mysql/lib/protocol/sequences/Sequence.js:15:20)
at new Quit (/home/mydir/node/node_modules/mysql/lib/protocol/sequences/Quit.js:8:12)
at Protocol.quit (/home/mydir/node/node_modules/mysql/lib/protocol/Protocol.js:61:45)
at Connection.end (/home/mydir/node/node_modules/mysql/lib/Connection.js:155:18)
at Query._callback (/home/mydir/node/app.js:31:20)
at Query.Sequence.end (/home/mydir/node/node_modules/mysql/lib/protocol/sequences/Sequence.js:75:24)
at Protocol._validateEnqueue (/home/mydir/node/node_modules/mysql/lib/protocol/Protocol.js:153:6)
at Protocol._enqueue (/home/mydir/node/node_modules/mysql/lib/protocol/Protocol.js:98:13)
at Connection.query (/home/mydir/node/node_modules/mysql/lib/Connection.js:140:25)
at Server.<anonymous> (/home/mydir/node/app.js:22:16)
The problem is that you're trying to reuse a connection created by mysql.createConnection
after that connection has been closed by connection.end()
. 问题是您正在尝试重用mysql.createConnection
创建的连接, mysql.createConnection
该连接已由connection.end()
关闭。
You need to move the call to mysql.createConnection
to inside the callback to http.createServer
, or (which I would recommend) use connection pooling instead. 您需要调用移动mysql.createConnection
回调里面http.createServer
, 或 (这我会建议)使用连接池来代替。
One way to quickly solve this is to remove your connection.connect
and connection.end
calls and rely on the implicit connection made by connection.query
一种快速解决此问题的方法是删除您的connection.connect
和connection.end
调用,并依赖由connection.query
的隐式connection.query
http.createServer(function(req, res){
res.writeHeader(200);
res.write('Connect to mySql\n');
connection.query("SELECT value FROM variable WHERE name = 'site_name'", function(err, rows){
if(err != null) {
res.end("Query error:" + err);
} else {
// Shows the result on console window
console.log(rows[0]);
res.end("Success!");
}
});
}).listen(80);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.