V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nyse
V2EX  ›  Node.js

NodeJS 在不同的模块里创建数据库连接,是各自创建一个连接吗?怎么共用同一个连接?

  •  
  •   nyse · 2018-09-28 10:59:41 +08:00 · 2791 次点击
    这是一个创建于 2255 天前的主题,其中的信息可能已经有所发展或是发生改变。

    database.js 数据库共用模块

    const mysql = require('mysql');
    
    let config = {...}
    
    function connect (conf = config) {
        let conn = mysql.createConnection(conf);
        conn.connect(function (err) {
            if (err) {
                console.log(err);
            } else {
                console.log('Connected to database.')
                return conn;
            }
    	});
    }
    
    module.exports = {
    	connect: connect
    }
    

    module1.js module2.js 假如都是这样

    const mysql = require('./database');
    
    mysql.connect();
    

    是不是创建了两个 MySQL 连接,如果过一段时间不用数据库操作,是不是会有断开的情况。

    怎样才能共用一个连接,一方面可以减少数据库的连接数,另一方面断开连接的时候重新连接的逻辑可以共用。 难道把它放到全局变量?

    2 条回复    2018-10-05 00:10:05 +08:00
    icris
        1
    icris  
       2018-09-28 11:22:27 +08:00
    module.exports = {
    connPool: mysql.createPool(config)
    }
    require('./database'). getConnection((err, conn) => conn.release())
    jerry4718
        2
    jerry4718  
       2018-10-05 00:10:05 +08:00
    单例模式
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2723 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:36 · PVG 20:36 · LAX 04:36 · JFK 07:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.