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.
- package/README.md +75 -17
- 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
|
|