thinkjs/lib/Lib/Core/Think.class.js
2014-01-07 10:34:50 +08:00

188 lines
5.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* [exports description]
* @type {Object}
*/
module.exports = {
/**
* [start description]
* @return {[type]} [description]
*/
start: function(){
//debug模式下不捕获异常
if (!APP_DEBUG) {
this.register_exception();
};
//thinkRequire的autoload
registerAutoload(this.autoload);
this.buildApp();
//记录进程的id
this.log_process_pid();
thinkRequire('App').run();
},
/**
* 注册异常处理
* @return {[type]} [description]
*/
register_exception: function(){
process.on('uncaughtException', function(err) {
console.log(err);
});
},
/**
* 加载项目下对应的文件
* @return {[type]} [description]
*/
buildApp: function(){
//加载系统默认配置
C(require(THINK_PATH + '/Conf/config.js'));
//加载用户配置
var file = CONF_PATH + '/config.js';
if (isFile(file)) {
C(require(file));
};
//自定义路由
if (C('url_route_on')) {
if (isFile(CONF_PATH + "/route.js")) {
C("url_route_rules", require(CONF_PATH + "/route.js"));
};
};
//加载行为配置
if (C('app_tag_on')) {
//加载系统行为配置
C('sys_tag', require(THINK_PATH + "/Conf/tag.js"));
//加载用户的行为配置
var tagFile = CONF_PATH + "/tag.js";
if (isFile(tagFile)) {
C('tag', require(tagFile));
};
};
//common文件
if (isFile(COMMON_PATH + "/common.js")) {
require(COMMON_PATH + "/common.js");
};
//别名文件
if (isFile(COMMON_PATH + "/alias.js")) {
aliasImport(require(COMMON_PATH + "/alias.js"));
};
//debug模式
if (APP_DEBUG) {
//加载debug模式下的配置
if (isFile(THINK_PATH + "/Conf/debug.js")) {
C(require(THINK_PATH + "/Conf/debug.js"));
};
//debug下自定义状态的配置
var status = C('app_status');
if (status) {
if (isFile(CONF_PATH + "/" + status + '.js')) {
C(require(CONF_PATH + "/" + status + ".js"));
};
}else{
if (isFile(CONF_PATH + '/debug.js')) {
C(require(CONF_PATH + '/debug.js'));
};
}
//debug模式下实时加载文件修改后刷新立即生效。
//只针对model,controller等类有效
//这些文件不清除缓存
var retainFiles = C('debug_retain_files');
setInterval(function(){
for(var file in require.cache){
var flag = retainFiles.some(function(item){
if (file.indexOf(item) > -1) {
return true;
};
});
if (!flag) {
delete require.cache[file];
};
}
}, 100);
};
},
/**
* 记录当前进程的id
* 记录在Runtime/Data/app.pid文件里
* @return {[type]} [description]
*/
log_process_pid: function(){
var isMaster = require('cluster').isMaster
if (C('log_process_pid') && isMaster) {
var pidFile = DATA_PATH + "/app.pid";
var fs = require("fs");
fs.writeFileSync(pidFile, process.pid);
//进程退出时删除该文件
process.on('SIGTERM', function () {
if (fs.existsSync(pidFile)) {
fs.unlinkSync(pidFile);
}
process.exit(0);
});
};
},
//thinkRequire的自动加载
autoload: function(cls){
var sysfile = cls + ".class.js";
var file = cls + C("class_file_suffix");
var sysCls = {
"Behavior": [
THINK_LIB_PATH + "/Behavior/" + sysfile,
LIB_PATH + "/Behavior/" + file
],
"Model": [
LIB_PATH + "/Model/" + file
],
"Controller": [
LIB_PATH + "/Controller/" + file
],
"Cache": [
LIB_PATH + "/Driver/Cache/" + file,
THINK_LIB_PATH + "/Driver/Cache/" + sysfile
],
"Db": [
LIB_PATH + "/Driver/Db/" + file,
THINK_LIB_PATH + "/Driver/Db/" + sysfile
],
"Template": [
LIB_PATH + "/Driver/Template/" + file,
THINK_LIB_PATH + "/Driver/Template/" + sysfile
],
"Socket": [
LIB_PATH + "/Driver/Socket/" + file,
THINK_LIB_PATH + "/Driver/Socket/" + sysfile
],
"Session": [
LIB_PATH + "/Driver/Session/" + file,
THINK_LIB_PATH + "/Driver/Session/" + sysfile
]
};
var autoloadPath = C('autoload_path');
for(var type in autoloadPath){
var paths = autoloadPath[type];
if (!isArray(paths)) {
paths = [paths];
};
paths = paths.map(function(path){
return path.replace(/__CLASS__/g, cls);
});
sysCls[type] = paths;
}
for(var name in sysCls){
var length = name.length;
if (cls.substr(0 - length) === name) {
var list = sysCls[name];
var filepath = '';
list.some(function(item){
if (isFile(item)) {
filepath = item;
return true;
};
});
if (filepath) {
return filepath;
};
};
}
}
}