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文件模块,及部分权限判断,可能跟你的项目有冲突,参考思路即可。
不懂得可以留言