UNPKG

codekart

Version:

Web application framework for Node.js

83 lines (68 loc) 2.37 kB
/** * 数据接口服务器 */ var path = require('path'); var util = require('util'); var route = load.core('!server/route'); var view = load.core('!view/view'); var callthis = load.core('!server/callthis'); var conThis = new callthis(); var json = load.tool('!json'); var config = load.config(); module.exports = function(request,response){ var pathname = request.url.pathname , pathary = splitPathname(pathname) , pleg = pathary.length , controller = 'index' , action = 'index'; //控制器路由 if(request.route){ // 已经注册的控制器路由 controller = request.route.controller; action = request.route.action; }else if(pleg==1){ // /controller controller = pathary[0]; }else if(pleg==2){ // /controller/action controller = pathary[0]; action = pathary[1]; }else{ // /path/path/controller/action controller = path.dirname(pathname); action = path.basename(pathname); } //初始化本地对象 conThis.__init(request,response); //如果为调试模式,直接调用,出错则抛出 if(config.debug){ load.app('controller/'+controller)[action].call(conThis); return; } // 非调试模式 异常处理 //控制器本地服务对象 var controllerOb; //尝试加载控制器 try{ controllerOb = load.app('controller/'+controller); //加载并调用方法 }catch (e){ if(config.debug) log(e); return view.render(request,response,'404'); } if(typeof controllerOb[action]!='function'){ return view.render(request,response,'404'); } //尝试调用控制器方法 try{ controllerOb[action].call(conThis); //加载并调用方法 }catch (e){ ok = false; //调用失败 request.error_msg = util.inspect(e); //request.error_msg = 'controller ['+controller+'] or action ['+action+'] runtime error !'; view.render(request,response,'error'); } }; function splitPathname(pathname){ var old = pathname.split('/') , ret = []; for(var k in old){ if(old[k]) ret.push(old[k]); } return ret; }