UNPKG

sumeru

Version:

A Realtime Javascript RIA Framework For Mobile WebApp

130 lines (107 loc) 4.68 kB
var runnable = function(fw){ /** * 1、将model文件build到一个文件,require进来 * 2、再读取一遍里面的fields,如果是model就吧modelname里面的前缀给去掉,存放在modelTempContainter里面备用; * 3、 */ /** * build model */ var fs = require('fs'); var path = require('path'); require(__dirname + '/../src/log.js')(fw); var readClientFile = require(__dirname + "/readClientFile.js");//执行本地js文件 // /* var buildFile = require(__dirname + '/lib/buildFile.js'); var buildModel = function(){ var base_path = __dirname + '/../model', target_path = __dirname + '/tmp'; //如果不存在,则创建临时目录 if(!path.existsSync(target_path)){ fs.mkdirSync(target_path); } var fileCnt = 'var Model = {}; '; fileCnt += buildFile.readfile(base_path); fileCnt += 'module.exports = Model;'; fs.writeFileSync(target_path + '/model.js', fileCnt, 'utf8'); }; buildModel(); */ //提取出model 中对field的定义,也就是config那部分 fw.server_model = {}; fw.server_model.modelTempContainter = {}; fw.server_model.modelRelation = {}; var buildModelTemp = function(){ //var modelPath = path.join(process.dstDir, 'server/tmp/model.js'); var appPath = process.appDir; var allTheDirFiles = []; var modelBaseDir = appPath + '/model'; var findAllTheDirFiles = function(theDir) { var theDirFiles = fs.readdirSync(theDir); for (var i = 0, len = theDirFiles.length; i < len; i++) { var thePath = theDir + '/' + theDirFiles[i]; theDirFiles[i].indexOf('.') === -1 ? findAllTheDirFiles(thePath) : allTheDirFiles.push(thePath); } }; if(fs.existsSync(modelBaseDir)){ findAllTheDirFiles(modelBaseDir); allTheDirFiles.forEach(function(file) { if (path.extname(file) == '.js' && path.basename(file, '.js') != 'package') { readClientFile(file,{"sumeru":fw,"Model":Model}); // var content = fs.readFileSync(file, 'utf-8'); // eval(content); }; }); }else{ fw.dev(modelBaseDir + ' DO NOT EXIST'); } var modelDef = Model; for (var model in modelDef){ var exports = {}, fieldsMap = {}; modelDef[model](exports); //只记录fields中的每个子model到当前父层model的对应关系,多层嵌套的关系留在查询关系的时候层层反应出来。 if(exports['config'] && exports['config']['fields']){ var fields = exports.config.fields; for (var i = 0, l = fields.length; i < l; i++){ var oneField = fields[i]; if(oneField['type']=='model'&& typeof oneField['model'] != 'undefined'){ oneField.model = oneField.model.replace(/Model\./, ''); fw.server_model.modelRelation[oneField.model] = fw.server_model.modelRelation[oneField.model] || []; if (fw.server_model.modelRelation[oneField.model].indexOf(model) == -1) { fw.server_model.modelRelation[oneField.model].push(model); }; } fieldsMap[oneField['name']] = oneField; } fieldsMap[fw.idField] = {name : fw.idField, type : 'int'}; //fieldsMap[fw.clientIdField] = {name : fw.clientIdField, type : 'string'}; } fw.server_model.modelTempContainter[model] = fieldsMap; fw.server_model.modelTempContainter[model].needAuth = exports['config'].needAuth; } }; buildModelTemp(); fw.server_model.getModelRelation = function(modelName){ if(typeof fw.server_model.modelRelation[modelName] == 'undefined'){ fw.server_model.modelRelation[modelName] = []; } return fw.server_model.modelRelation[modelName]; } fw.server_model.getModelTemp = function(modelName){ if(typeof fw.server_model.modelTempContainter[modelName] == 'undefined'){ fw.log('error: undefined modelName.', modelName); return false; } //fw.dev(fw.server_model.modelTempContainter[modelName]); return fw.server_model.modelTempContainter[modelName]; } //added by sundong,for server running client code. fw.server_model._getModelTemp = function(modelName){ //client model name with :::: Model.modelName,so remove "Model." return fw.server_model.getModelTemp(modelName.substr(6)); } }; module.exports = runnable;