You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.8 KiB
77 lines
1.8 KiB
require('mysql');
|
|
var fs = require("fs");
|
|
var orm = require("orm");
|
|
var Promise = require("bluebird");
|
|
var path = require("path");
|
|
|
|
/*
|
|
app: 应用程序环境
|
|
config: 数据库配置
|
|
callback: 回调
|
|
*/
|
|
function initialize(app,callback) {
|
|
|
|
// 加载配置文件
|
|
var config = require('config').get("db_config");
|
|
|
|
// 从配置中获取数据库配置
|
|
var opts = {
|
|
protocol : config.get("protocol"),
|
|
host : config.get("host"),
|
|
database : config.get("database"),
|
|
port : config.get("port"),
|
|
user : config.get("user"),
|
|
password : config.get("password"),
|
|
query : {pool: true,debug: true}
|
|
};
|
|
|
|
|
|
console.log("数据库连接参数 %s",JSON.stringify(opts));
|
|
|
|
// 初始化ORM模型
|
|
app.use(orm.express(opts, {
|
|
define: function (db, models, next) {
|
|
|
|
app.db = db;
|
|
global.database = db;
|
|
|
|
// 获取映射文件路径
|
|
var modelsPath = path.join(process.cwd(),"/models");
|
|
|
|
// 读取所有模型文件
|
|
fs.readdir(modelsPath,function(err, files) {
|
|
// 存放所有的加载模型函数
|
|
var loadModelAsynFns = new Array();
|
|
// console.log("开始加载 ORM 模型层文件 ");
|
|
for (var i = 0; i < files.length; i++) {
|
|
var modelPath = modelsPath + "/" +files[i];
|
|
// console.log("加载模型 %s",modelPath);
|
|
loadModelAsynFns[i] = db.loadAsync(modelPath);
|
|
}
|
|
|
|
Promise.all(loadModelAsynFns)
|
|
.then(function(){
|
|
// console.log("ORM 模型加载完成");
|
|
// 挂载模型集合
|
|
|
|
for(var modelName in db.models){
|
|
models[modelName] = db.models[modelName];
|
|
}
|
|
app.models = models;
|
|
callback(null);
|
|
next();
|
|
})
|
|
.catch(function(error){
|
|
console.error('加载模块出错 error: ' + err);
|
|
callback(error);
|
|
next();
|
|
});
|
|
});
|
|
}
|
|
}));
|
|
}
|
|
|
|
module.exports.initialize = initialize;
|
|
module.exports.getDatabase = function() {
|
|
return global.database;
|
|
} |