说明
基础Express做的模块化开发框架,按模块划分业务,支持模块内视图和路由配置,每个模块目录可拥有独立的controller、service、model、static等,这样可以让负责不同业务模块的开发人员更关注业务本身。
安装
npm i express-moduledev
项目目录结构 [方括号为可选目录]
app // 项目主目录│ |─ modules //模块目录│ │ |─ module_A //业务模块A│ │ │ |─ ctrls 控制器文件│ │ │ | └─ controller1js│ │ │ |─ views 视图模板文件│ │ │ | └─ indexhtml│ │ │ |─ static //静态文件等│ │ │ |─ models //数据处理文件│ │ │ |─ servs //服务层 业务处理│ │ │ └─ routerjs //模块的路由配置文件│ │ |── module_B 模块B│ |─ models //ORM 数据库模型定义文件(放在顶级,表示可通用)│ |─ routes //通用路由器配置│ |─ views //通用视图模板文件存放位置│ └─ ctrls //通用控制器文件├─ config //环境配置目录│ |─ defaultjs //默认配置文件│ |─ developmentjs //开发环境配置文件│ |─ productionjs //生产环境配置文件│ └─ testingjs //测试环境配置└─ indexjs //启动文件
在您的项目根目录,新建启动文件index.js(或其它名字)
//index.jsvar em = ; var config = //指定端口,默认端口 8000 //"port":80, //使用环境 'default','development','production','testing' "use_env": "default" //顶级路由存放目录名称 默认routes //"router":"routes/", //启动服务ememlog
配置文件
//这里使用了类的形式来定义配置//config/default.jsvar session = ;var FileStore = session//var em = require('express-moduledev');//var FileStore = require('session-file-store')(em.session) { //是否开启调试模式 thisdebug = false; //数据库连接配置 thisdatabase = "host": "127.0.0.1" "port": "3306" "database": "test" "username": "root" "password": "root" "dialect": "mysql" ; //配置session_store thissession_store = "secret": 'skdf093ks' "cookie": maxAge: 1000 * 60 * 60 * 24 "resave": true "saveUninitialized": false "store": ; //配置日志信息 //this.log4js = false //关闭日志 thislog4js = appenders: out: type: 'stdout' app: type: "dateFile" filename: 'logs/log' pattern: "_yyyyMMdd.log" alwaysIncludePattern: true maxLogSize: 20480 backups: 3 categories: default: appenders: 'out''app' level: 'info' } moduleexports = Config; //开发环境文件//config/development.jsvar session = ;var RedisStore = session var Config = ;//这里需要继承Config { super; thisdebug = true; thisdatabase = ... //配置session_store thissession_store = "secret": 'skdf093ks' "cookie": maxAge: 1000 * 60 * 60 * 24 "resave": true "saveUninitialized": false "store": "host": '127.0.0.1' "port": '6300' }moduleexports = Development; ...
可以通过 em.config 获取配置选项
桥接文件
有时我们需要加载自己的通用函数库,或者对模板进行扩展,可以通过桥接文件实现,在 app下新建bridge目录,该目录下的文件会自动加载(支持多目录多文件)
//app/bridge/templateExt.js //对nunjucks模板扩展方法moduleexportstpl = //这里的 tpl 名字可以自己定义 //init将自动执行 { //获取配置信息 let envcfg = appconfig; //获取模板对象 let tpl = app; //添加一个模板全局变量 tpl //添加一个日期过滤器 tpl } //app/bridge/Comm.js//通用库文件moduleexportscomm = { } //通过全局APP调用方法APPcomm
版本更新
- 1.0.7 支持modules下再分modules
- 1.0.8 修改modules下再分modules的部分bug
- 1.0.9 添加DB SQL防注入功能
- 1.0.10 新增自定义函数库加载,位于app/bridge目录下
- 1.0.11 支持log4js日志配置功能
- 1.0.12 优化数据库加载
- 1.0.13 修复模块加载时指定静态资源目录无法加载的问题
- 1.0.15 修复sequelize兼容问题
- 1.0.16 修复在子目录启动项目时,加载配置文件会读取根目录导致加载失败的问题
- 1.0.18 支持配置文件设置静态目录 static_folder
- 1.0.21 去掉根据文件路径获取模块名,modules里的路由应该写到modules里去
- 1.0.22 添加路由配置允许设定是否跳过csrf检测
- 1.0.24 把检测csrf的方法放移到了router.js里//设置chkcsrf为flase表示跳过csrf检测,限POST方法prefix:"/test" ctrl:"test" action:"test" method:"GET" "POST""chkcsrf": false
- 1.0.25 修复在路由配置中,如果指定url_prefix前缀,prefix无法设置数组的bugexportsurl_prefix = "/abc"//prefix 可以使用数组定义 ,路由可以命中 /abc 也可以命中 /abc/index.htmlprefix: "/""/index.html" ctrl:"test" action:"test"
开源地址
https://github.com/rob668/express-moduledev
在线DEMO
http://www.robweb.cn/demos/express-moduledev-demo