从Node.js中的所有外部JS文件访问模块

时间:2014-01-03 09:51:43

标签: node.js design-patterns express

上下文

如果我说2个课程,例如 User.js 类和 Log.js 类,它们都以自己独特的方式访问数据库,并且我已经安装了MySQL数据库模块,例如db-mysql

问题

我怎样才能这样做,以便在两个JS文件中使用相同的(一个)数据库实例?

思想

我想我现在想到的两种方法并不是很有记忆意识:

  1. 中传递db参数
    function(db){
        this.db = db;
    } 
    
  2. 在每个类中创建一个实例

    function(){
        this.db = require(moduleName);
    }
    
  3. 我只是在寻找最好的方法,需要一些指导。

2 个答案:

答案 0 :(得分:3)

创建一个单独的文件,您可以在其中连接到db。您将该连接保留在该模块的闭包中,当您稍后需要该模块时,从任何其他文件开始,它将使用相同的连接。

简单示例如下:lib / db.js

var mysql = require('db-mysql');
var settings = {  // import these from ENV is a good pattern
    hostname: 'localhost'
    , user: 'user'
    , pw: '****'
    , database: 'base'
}
var db =new mysql.Database(settings).on('error', function(error) {
    console.log('ERROR: ' + error);
}).on('ready', function(server) {
    console.log('Connected to ' + server.hostname + ' (' + server.version + ')');
}).connect();

module.exports = db;

然后在其他文件中使用它:

var db = require('../lib/db');
db.query(...)

您甚至可以在db.js中抽象一些基本查询,例如:

function getUsers(filterString, callback) {
    db.query().select('id, username, email').from('users').where('username like', filterString)
    .execute(callback);
}
module.exports.getUsers = getUsers

然后在其他文件中:

var db = require('lib/db');
db.getUsers('mike', function(err, rows, cols) {
         if(err) throw err;
         return [rows, cols];
    });

答案 1 :(得分:1)

传递数据库参数。

还要创建一个名为DBConfig.js的新JS文件,您可以在其中存储MySQL DB的凭据。使用此javascript对象启动数据库。对于Ex:

var db = require('DBConfig);

在DBConfig.js中,您可以编写

module.exports = {
 host:'<host_url>',
 username: root,
 password: '',
 database: '<database-name>'
}

通过这种方式,您可以在JS文件中使用相同的配置。