无法在节点中建立持久的mysql连接

时间:2018-09-30 14:01:16

标签: mysql node.js

我有一个以前正常工作的节点mysql连接,但是由于流量开始来,我遇到了奇怪的错误

Error: Connection lost: The server closed the connection.

这是我正在使用的课程

const mysql = require('mysql');

class Database {
constructor() {
    this.connection = mysql.createConnection({
        host: process.env.DB_HOST,
        user: process.env.DB_USERNAME,
        password: process.env.DB_PASSWORD,
        database: process.env.DB_NAME,
        port: 3306,
        debug: false,
        multipleStatements: false
    });
}
query(sql, args) {
    return new Promise((resolve, reject) => {
        this.connection.query(sql, args, (err, rows) => {
            if (err)
                return reject(err);
            resolve(rows);
        });
    });
}
close() {
    return new Promise((resolve, reject) => {
        this.connection.end(err => {
            if (err)
                return reject(err);
            resolve();
        });
    });
 }
}
module.exports = Database;

有人可以帮忙为什么吗?

编辑:这就是我调用代码的方式

const database = new Database();
database.query(`select * from users...
`, [req.user.id, parseInt(req.body.after)])
    .then(rows => {
        appData[".."] = rows['ddd']
        res.status(200).json(appData);
        database.close()
    }, err => {
        return database.close().then(() => { throw err; })
    })
    .catch(err => {
        console.log(err);
        res.status(500).json("Database Error");
    })

2 个答案:

答案 0 :(得分:1)

首先创建文件ex database.js

var mysql = require('mysql');
var pool = mysql.createPool({
    connectionLimit: 10,
    host: conf_core_sys.dbConfig.host,
    user: conf_core_sys.dbConfig.user,
    dateStrings: true,
    password: conf_core_sys.dbConfig.pass,
    database: conf_core_sys.dbConfig.dbName,
    port:conf_core_sys.dbConfig.port,
    debug: false
});

module.exports = pool;
exports.executeQuery = function (query, callback) {
    pool.getConnection(function (err, connection) {
        if (err) {
            connection.release();
            throw err;
        }
        connection.query(query, function (err, rows) {
            connection.release();
            if (!err) {
                callback(null, {
                    rows: rows
                });
            }
        });
        connection.on('error', function (err) {
            throw err;
            return;
        });
    });
}

第二步:

let database = require("database")
let sql ="SELECT * from users";
database.query(sql, function (error, results, fields) {
    if (error) {
        callback(results)
    } else {
        callback(results)
    }
})

答案 1 :(得分:0)

前段时间我遇到了同样的问题,但是目前还没有发生问题,也许这种解决方案可以帮助您,

var mysql = require('mysql');

var pool = mysql.createPool({
    connectionLimit: 10,
    host: process.env.DB_HOST,
    user: process.env.DB_USERNAME,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_NAME,
    port: 3306,
    debug: false,
    multipleStatements: false
});

module.exports = pool;


exports.executeQuery = function (query, callback) {
    pool.getConnection(function (err, connection) {
        if (err) {
            connection.release();
            throw err;
        }
        connection.query(query, function (err, rows) {
            connection.release();
            if (!err) {
                callback(null, {
                    rows: rows
                });
            }
        });
        connection.on('error', function (err) {
            throw err;
            return;
        });
    });
}