如果我说2个课程,例如 User.js 类和 Log.js 类,它们都以自己独特的方式访问数据库,并且我已经安装了MySQL数据库模块,例如db-mysql
我怎样才能这样做,以便在两个JS文件中使用相同的(一个)数据库实例?
我想我现在想到的两种方法并不是很有记忆意识:
在
中传递db参数function(db){
this.db = db;
}
在每个类中创建一个实例
function(){
this.db = require(moduleName);
}
我只是在寻找最好的方法,需要一些指导。
答案 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文件中使用相同的配置。