首頁  >  問答  >  主體

node.js - nodejs中,mysql连接——是每次查询连接一次数据库,还是启动node时连接数据库,关闭时再断开好呢?

黄舟黄舟2743 天前726

全部回覆(2)我來回復

  • 天蓬老师

    天蓬老师2017-04-17 12:10:15

    兩種方式解決
    1、你可以設定mysql的連線池

    var mysql = require('mysql');
    var pool = mysql.createPool({
        host: 'localhost',
        user: 'nodejs',
        password: 'nodejs',
        database: 'nodejs',
        port: 3306
    });
    
    var selectSQL = 'select * from t_user limit 10';
    
    pool.getConnection(function (err, conn) {
        if (err) console.log("POOL ==> " + err);
    
        conn.query(selectSQL,function(err,rows){
            if (err) console.log(err);
            console.log("SELECT ==> ");
            for (var i in rows) {
                console.log(rows[i]);
            }
            conn.release();
        });
    });
    

    2、你可以使用斷線重連的方式來解決

    var mysql = require('mysql');
    var conn;
    function handleError () {
        conn = mysql.createConnection({
            host: 'localhost',
            user: 'nodejs',
            password: 'nodejs',
            database: 'nodejs',
            port: 3306
        });
    
        //连接错误,2秒重试
        conn.connect(function (err) {
            if (err) {
                console.log('error when connecting to db:', err);
                setTimeout(handleError , 2000);
            }
        });
    
        conn.on('error', function (err) {
            console.log('db error', err);
            // 如果是连接断开,自动重新连接
            if (err.code === 'PROTOCOL_CONNECTION_LOST') {
                handleError();
            } else {
                throw err;
            }
        });
    }
    handleError();
    

    回覆
    0
  • 黄舟

    黄舟2017-04-17 12:10:15

    mysql是有連接池的 並發大的情況下 如果你之前的連接不關閉 連接池滿了 請求無法處理 程式就會阻塞 因此是用完是需要釋放的

    回覆
    0
  • 取消回覆