jj.js 0.8.3 → 0.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +75 -17
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -30,7 +30,7 @@ A simple and lightweight MVC framework built on nodejs+koa2(一个基于nodejs
30
30
  npm i jj.js
31
31
  ```
32
32
 
33
- > 运行环境要求:node.js >= v12
33
+ > 运行环境要求:node.js >= v12 mysql >= 5.3
34
34
 
35
35
  ## Hello world !
36
36
 
@@ -276,6 +276,16 @@ module.exports = Index;
276
276
 
277
277
  > 注意:所有的输出和跳转并不会阻止后续代码执行,所以要终止代码执行,需在前面加上`return`。
278
278
 
279
+ > 方法:**async _init()** 控制器初始化
280
+
281
+ 异步方法,除了使用控制器中间件执行一些初始化或验证外,控制器提供了这个更简单的方法。一旦控制器定义了这个方法,在通过url访问控制器其他公开方法时,在执行完控制器中间件后,都会先执行这个函数,如果想终止后续代码执行,可以在方法里返回`false`。
282
+
283
+ > 方法:**async _end()** 控制器结束
284
+
285
+ 如果定义了这个函数,在通过url访问控制器其他公开方法后,会调用这个函数。
286
+
287
+ > 注意:因为系统默认注册了 `应用/控制器/方法` 的全局路由,所以控制器里的方法都能被直接访问,如果想作为私有方法不被访问,可以在方法前加下划线`_`前缀。
288
+
279
289
  ### Middleware中间件类
280
290
 
281
291
  > 方法:**$show(content)** 参照控制器类介绍
@@ -727,9 +737,9 @@ module.exports = route;
727
737
 
728
738
  应用配置不用每项都设置,只设置自己需要改的,默认会继承框架的默认配置,在控制器、中间件、模板类、模型类里都可以通过`this.$config.xxx`使用。
729
739
 
730
- app配置`.config/app.js`:
740
+ - app配置`.config/app.js`:
731
741
  ```javascript
732
- {
742
+ const app = {
733
743
  app_debug: true, // 调试模式
734
744
  app_multi: false, // 是否开启多应用
735
745
 
@@ -744,20 +754,22 @@ app配置`.config/app.js`:
744
754
 
745
755
  koa_body: null // koa-body配置参数,为''、null、false时,关闭koa-body,此时upload类将不可用,并且系统接收不到post参数。启用的话,建议配置:{multipart: true, formidable: {keepExtensions: true, maxFieldsSize: 10 * 1024 * 1024}}
746
756
  }
757
+ module.exports = app;
747
758
  ```
748
- 模板配置`.config/view.js`:
759
+ - 模板配置`.config/view.js`:
749
760
  ```javascript
750
- {
761
+ const view = {
751
762
  view_folder: 'view', // 模板目录名
752
763
  view_depr: '/', // 模版文件名分割符,'/'代表二级目录
753
764
  view_ext: '.htm', // 模版文件后缀
754
765
  view_engine: 'art-template', // 默认模版引擎,字符串或引擎类,咱不支持更换
755
766
  view_filter: {}, // 模版函数,配置注入模板的函数,默认会自动注入url函数
756
767
  }
768
+ module.exports = view;
757
769
  ```
758
- 数据库配置`.config/db.js`:可以配置多个,方便程序里切换使用。
770
+ - 数据库配置`.config/db.js`:可以配置多个,方便程序里切换使用。
759
771
  ```javascript
760
- {
772
+ const db = {
761
773
  default: {
762
774
  type : 'mysql', // 数据库类型
763
775
  host : '127.0.0.1', // 服务器地址
@@ -769,24 +781,27 @@ app配置`.config/app.js`:
769
781
  prefix : 'jj_' // 数据库表前缀
770
782
  }
771
783
  }
784
+ module.exports = db;
772
785
  ```
773
- 日志配置`.config/log.js`:log_handle可以自定义日志handle
786
+ - 日志配置`.config/log.js`:log_handle可以自定义日志handle
774
787
  ```javascript
775
- {
788
+ const log = {
776
789
  log_level: [], // [error, warning, info, debug, http, sql]
777
790
  log_handle: function(msg, level) {console.log(`[${format('YY-mm-dd HH:ii:ss')}] [${level}] ${typeof msg == 'String' ? msg : JSON.stringify(msg)}`);} //function(msg, level) {}
778
791
  }
792
+ module.exports = log;
779
793
  ```
780
- 缓存配置`.config/cache.js`:
794
+ - 缓存配置`.config/cache.js`:
781
795
  ```javascript
782
- {
796
+ const cache = {
783
797
  cache_time: 60 * 60 * 24, // 默认缓存时间(1天),为空或false则为10年
784
798
  clear_time: undefined // (undefined: 一天清理一次, 0: 关闭自动清理, >0: 为自动清理周期)
785
799
  }
800
+ module.exports = cache;
786
801
  ```
787
- 分页配置`.config/page.js`:
802
+ - 分页配置`.config/page.js`:
788
803
  ```javascript
789
- {
804
+ const page = {
790
805
  page_key : 'page', // 默认分页标识
791
806
  key_origin : 'query', // query 或 params
792
807
  page_size : 10, // 默认分页大小
@@ -810,22 +825,65 @@ app配置`.config/app.js`:
810
825
  //渲染模版
811
826
  template : '<div class="pagination"><ul class="page">${index}${prev}${list}${next}${end}</ul>${info}</div>'
812
827
  }
828
+ module.exports = page;
813
829
  ```
814
- 跳转模板配置`.config/tpl.js`:模板可以配置为自定义的
830
+ - 跳转模板配置`.config/tpl.js`:模板可以配置为自定义的
815
831
  ```javascript
816
- {
832
+ const tpl = {
817
833
  jump: require('./tpl/jump'), // 跳转模板
818
834
  exception: require('./tpl/exception') // 异常页面模板
819
835
  }
836
+ module.exports = tpl;
820
837
  ```
821
- 自定义配置`.config/self.js`:自定义配置同样可以直接通过`this.$config.self`使用。
838
+ - 自定义配置`.config/self.js`:自定义配置同样可以直接通过`this.$config.self`使用。
822
839
  ```javascript
823
- {
840
+ const self = {
824
841
  option1: ''
825
842
  option2: ''
826
843
  ...
827
844
  }
845
+ module.exports = self;
846
+ ```
847
+ - 路由配置`.config/routes.js`:
848
+ 路由功能基于`@koa/router`开发,关于url匹配规则可以参考官方文档:[文档地址](https://www.npmjs.com/package/@koa/router)
849
+
850
+ > 本框架默认内置 `应用/控制器/方法` 的全局路由,即如果不需要定制url,可以直接访问,无需配置路由。
851
+
852
+ > 路由配置为一个数组,每一项为一条规则,项属性包含url规则,path访问路径,name规则名字,type路由类型。url一旦匹配,即会停止,如果需要继续向下匹配,需在程序内调用 `await this.$next();`,路由配置参考示例:
853
+ ```javascript
854
+ routes = [
855
+ {url: '/', path: 'app/index/index2'}, // 访问'/',会定位到app应用的index控制的index2方法
856
+ {url: '/article/:id.html', path: 'app/article/article', name: 'article'}, // 访问'/article/123.html',会定位到app应用的article控制的article方法;通过this.ctx.parrams.id可以获取到参数id;通过article可以反编译网址,执行this.$url.build(':article', {id: 123}); 生成'/article/123.html'
857
+ {url: '/admin', path: 'app/admin/check', type: 'middleware'}, // 访问'/admin',会定位到app应用的admin中间件的check方法
858
+ {url: '/about', path: 'app/about/index', type: 'view'}, // 访问'/about',会定位到app应用的view模板目录about目录下的index.htm文件,并直接输出文件内容
859
+ {url: '/:cate/list_:page.html', path: 'cate/cate', name: 'cate_page'}, // 多参数分页示例
860
+ {url: '/hello', path: async (ctx, next) => {ctx.body = 'hello world, hello jj.js!';}} // 直接路由到函数
861
+ ];
862
+
863
+ module.exports = routes;
864
+ ```
865
+ > 注意:本路由配置示例前两条规则为常规用法,后面的非常规用法,不建议使用。如果是但应用模式,可以去掉path参数里的app。
866
+
867
+ ### 应用入口文件
868
+
869
+ 应用入口文件放在项目的根目录,名字可以任意改。
870
+
871
+ 示例文件 `./server.js`
872
+ ```javascript
873
+ const {app, Logger} = require('jj.js');
874
+
875
+ app.run(3000, '127.0.0.1', function(err){
876
+ !err && Logger.info('http server is ready on 3000');
877
+ });
828
878
  ```
879
+ 其中`app`是一个koa实例,可以使用`use`方法添加应用级中间件,使用方法参考koa文档。`app`的`run`方法经过了封装,仅允许调用一次。其中`Logger`因为是一个静态类,所以可以直接调用`info`方法输出日志。
880
+
881
+ ## 总结
882
+
883
+ 通过以上文档,可以看到:
884
+ 1. jj.js是一个轻量的mvc框架,几乎所有文件不使用就不会调用。
885
+ 2. 同时也是个功能强大的框架,支持应用级、路由级、控制器级三级中间件。
886
+ 3. 类库自动加载,只要是继承自`Context`的类库,都可以在方法内使用包含`$`前缀的属性自动加载其他资源。
829
887
 
830
888
  ## 应用案例
831
889
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jj.js",
3
- "version": "0.8.3",
3
+ "version": "0.8.4",
4
4
  "description": "A simple and lightweight MVC framework built on nodejs+koa2",
5
5
  "main": "jj.js",
6
6
  "scripts": {