nodejs mysql 怎么封装模块

在用nodejs express mysql 对于mysql

var mysql = require('mysql');
var db = mysql..
db.connect();

db.query(..)

是这样写的,但是我想export出去,别的文件也能引用,不知道怎么写。
如果这样直接export db, 是不是每次引用都要重新连接数据库。求一个好的写法。还要考略mysql 断线重连的问题,谢谢。

阅读 6k
4 个回答

exports.conn = db.connect();

建议直接使用 NodeJS + MySQL 的 ORM 封装 Sequelize 来实现,能方便的设置连接池、保持长连接,各种数据操作都给你封装好了,程序员就是懒嘛,还用自己去连数据库?

var mysql = require('mysql');
var $conf = require('../conf/dbconf');
var pool = mysql.createPool($conf.local);

module.exports = pool;

其它文件

var pool = require('./pool');
pool.getConnection(function(err,connection){
            connection.query(...);
});

仅供参考

一般要是全局依赖的话,我都是通过注入传参进去的,我自己常用的Loadder:

https://github.com/conglai/clmloader

如果这个MySQL是一个全局依赖的话,假设目录A下所有模块都会需要用到:

- 目录A
  - 模块1
    - index.js
  - 模块2
    - index.js
  - 模块3
    - index.js

index.js:

module.exports = function(db) {
  return Promise.resolve({
    test: 2
  });
};

在外面:

var mysql = require('mysql');
var db = mysql..
db.connect();

...
const clmLoad = require('clmloader');


co(function*(){
    let map = yield clmLoad({
      path: '目录A', // absolute dir path
      deps: [db], // deps pass to module function
      defaultFile: 'index', // read which default file
      attach: { //attach some args
        common: 'xx'
      }
    });
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题