要实现这个功能,首先需要一个能解释命令行的工具,这里使用的是yargs插件API地址https://github.com/chevex/yargs。通过指令node server.js –P pro 来指定环境。
在config.js文件中编写如下内容:
var argv = require('yargs').argv;
//这里就可以使用argv读取命令行中的参数了
exports.database = {
sock: argv['sock'] || false,
type: 'redis',
host: redis_conf.split(':')[0] || '127.0.0.1',
port: redis_conf.split(':')[1] || 6379,
profile: argv['P'] || 'dev'
};
在redis.js文件中,创建db对象,链接redis。
var conf = require('../../config.js').database;
var redis = require("redis"),
redisClient = null;
require('node-redis-streamify')(redis);
var db = function(callback) {
if (conf.sock) {
console.log('Opening redis connection to socket ' + conf.host);
redisClient = redis.createClient(conf.host);
} else {
console.log('Opening redis connection to ' + conf.host + ':' + conf.port);
redisClient = redis.createClient(conf.port, conf.host, {});
}
/*
* 通过命令行中的参数来指定数据库
* 如果是pro 那么使用db1 作为数据库
* 如果是dev 那么使用db0 作为数据库
*/
if(conf.profile == 'pro'){
redisClient.select(1, function(err, res){
console.log('I am a pro db.')
});
}else{
redisClient.select(0, function(err, res){
console.log('I am a dev db.');
})
}
redisClient.on("connect", function (err) {
callback();
});
redisClient.on("error", function (err) {
console.log("Redis error: " + err);
});
};
db.prototype = {
setRoomSetting: function (room, member) {
redisClient.hset("member", room, JSON.stringify(member));
},
getFriendlyLinks: function (callback) {
redisClient.hgetall('links', function (error, res) {
if (error) {
return;
}
console.log('getFriendlyLinks db response:' + res);
if (res) {
callback(res);
}
});
}
}
配置一个用于创建db对象的配置文件data.js
var conf = require('../config.js').database;
console.log(conf.type)
//这样可以根据配置来切换数据库
exports.db = require('./data/'+conf.type+'.js').db;
//也可以直接使用数据库
exports.mongodb = require('./data/mongodb.js').db;
最后在server.js中使用db
var data = require('./lib/data.js').db;
var db = new data(function(){
});
//这时候db对象已经创建完毕
//可以在其他地方使用db来调用它的prototype方法,完成数据操作
db.getFriendlyLinks(function(res){
console.dir(res);
});