ホームページ  >  に質問  >  本文

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

黄舟黄舟2743日前722

全員に返信(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
  • キャンセル返事