簡體   English   中英

Node.js和MySQL:HTTP服務器在首次運行后停止

[英]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.endconnection.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.connectconnection.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM