[英]Node.js & MySQL: HTTP server stops after first run
我正在使用node-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);
首先,我對connection.end
與connection.connect
級別不同感到奇怪
我試過將connection
更改為同一級別,並放置在不同的位置,但是仍然沒有運氣
以下是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)
問題是您正在嘗試重用mysql.createConnection
創建的連接, mysql.createConnection
該連接已由connection.end()
關閉。
您需要調用移動mysql.createConnection
回調里面http.createServer
, 或 (這我會建議)使用連接池來代替。
一種快速解決此問題的方法是刪除您的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.