nodejs路由解析,MVC架构

var route = module.exports = {};
var result = false;
route.init = function(app){
	app.all('/:group?/:control?/:action?/:args1?/:args2?/:args3?',function(req, res, next){
		res.locals.app_group = req.params.group || 'index';
		res.locals.app_control = req.params.control || 'index';
		res.locals.app_action = req.params.action || 'index';

		res.locals.app_args1 = req.params.args1;
		res.locals.app_args2 = req.params.args2;
		res.locals.app_args3 = req.params.args3;

		//配置全局session
		res.locals.app_session = req.session || null;
		//配置全局的global参数
		res.locals.global = global;
		//导入配置文件
		res.locals.webconfig = ETMS.webconfig;
		_render = res.render;

		//权限判断
		if(req.session.user && req.session.user.level!==10 && req.params.group && req.params.group=='admin' && req.params.control!=='user' && req.params.action!=='edit' ){
			next();return;
		}
		if(!req.session.user && req.params.group=='user' && req.params.control!=="teacher"){
			next();return;
		}
		//
		var app_group = req.params.group || 'index';
		var app_control = req.params.control || 'index';
		var app_action = req.params.action || 'index';
		fs.exists(__ROUTES+'\\'+app_group+"\\"+app_control+".js", function(exists){
			if(exists){
				//首先处理模板
				res.render = function(view, options, callback) {
				 _render.call(this, res.locals.app_group + '/' + view, options, callback);
				};
				//调用文件
				var control = require(__ROUTES+'\\'+app_group+"\\"+app_control);
				if(control[app_action] && typeof(control[app_action]) == 'function')
				{
					result = true;
					control[app_action](req, res, next);
				}else{
					next();
				}
			}else{
				//二级缩进
				fs.exists(__ROUTES+'\\'+'index'+"\\"+app_group+".js", function(exists){
					if(exists){
						//重新处理常量
						res.locals.app_group = 'index';
						res.locals.app_control = req.params.group || 'index';
						res.locals.app_action = req.params.control || 'index';
						res.locals.app_args1 = req.params.action;
						res.locals.app_args2 = req.params.args1;
						res.locals.app_args3 = req.params.args2;
						res.locals.app_args4 = req.params.args3;
						//首先处理模板
						res.render = function(view, options, callback) {
						 _render.call(this, res.locals.app_control + '/' + view, options, callback);
						};
						//调用文件
						var control = require(__ROUTES+'\\'+res.locals.app_group+"\\"+res.locals.app_control);
						if(control[res.locals.app_action] && typeof(control[res.locals.app_action]) == 'function')
						{
							result = true;
							control[res.locals.app_action](req, res, next);
						}else{
							next();
						}
					}else{
						next();
					}
				})
			}
		})
	});
	//设置文件下载
	app.all('/static/uploads/resoure/:file?',function(req, res, next){
		fs.exists(__UPLOADS+'/resoure/'+req.params.file, function(exists){
			if(exists){
				res.download(__UPLOADS+'/resoure/'+req.params.file);
			}else{
				next();
			}
		});
	});
	//设置文件下载
	app.all('/static/uploads/works/:file?',function(req, res, next){
		fs.exists(__UPLOADS+'/works/'+req.params.file, function(exists){
			if(exists){
				res.download(__UPLOADS+'/works/'+req.params.file);
			}else{
				next();
			}
		});
	});
	//404
	app.all('/*',function(req,res, next){
		var filepath = ETMS.path.normalize(ETMS.path.join(__ROOT, req.url));
		fs.exists(filepath,function(exists){
			if(exists){
				next();
			}else{
				res.render = function(view, options, callback) {
				 _render.call(this,	view, options, callback);
				};
				return res.status(404).render(__VIEWS+'/404.html', {message: '404'});
			}
		})
		
	});
}

使用到了express的部分功能,MVC架构

代码中引用到了fs文件模块,及部分权限判断,可能跟你的项目有冲突,参考思路即可。

不懂得可以留言

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值