Main
Kvl框架启动总入口,一个项目初始化一个kvl服务
import { Main ,Router, config, data, Global, Injectable, FindById, FindByName } from 'kvl';
Main({
port: 8080,
router: [ HelloWord ],
})
1
2
3
4
5
6
7
2
3
4
5
6
7
Main返回包含三个参数
import kvl from 'kvl';
const MainConfig = {
port: 8080
};
Main(MainConfig).then(({ app, httpServer, httpsServer }) => {
})
//app为kvl内部创建的express()对象,方便使用者绕过kvl直接调用express
//httpServer为通过http.createServer创建的http对象
//httpsServer为通过https.createServer创建的https对象(注意,如果为Main配置了https才会返回该对象)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Main参数说明
const MainConfig: Kvl.InitConfig = {
port: 8080, //服务端口号
baseUrl: '', //服务下路由根路径
router: [], //路由对象,由@Router生成
static: '', //静态服务器,未设置则不启用
https: {}, //https参数,详见Https.createServer
interceptor: function(){}, //全局拦截器
throw: function(){}, //处理服务接口内的错误
express: function(app){}, //app为express实例化对应,可以在次函数内为app添加各种中间件
getData: function(){}, //自定义post解析方法
plugin: [], //加载插件
injectable: [], //注入器
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
Router
@Router({
name: '', //类的名字,区分定义使用
url: '', //类下所有包括router下的请求都会带有此url
router: [], //路由class对象,@Router生成
interceptor: function(){}, //类拦截器
interceptorLevel: 1 //拦截器级别
})
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
config
@config({
name: '', //请求的名字,区分定义使用
url: '', //请求的url
type: 'get', //请求的方式,也可以声明一个数组: ["get","post","put"]
interceptor: function(){}, //拦截器
interceptorLevel: 1 //拦截器级别
validation: {}, //数据效验器,验证数据是否正确
validType: 'query', //设置数据效验器类型('query' | 'body' | 'param' | 'all')
getData: function(){}, //自定义post解析方法
})
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
data
@Router({})
class HelloWord{
//用于获取router中传进来的参数->{ parent: 'aaaaaaa' }
@data private initData: any;
}
Main({
router: [ { class: HelloWord, data: { parent: 'aaaaaaa' } } ]
})
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
Global
@Router({})
class HelloWord{
//用于获取全局变量 -> { name: tom }
@Global private global: any;
}
Main({
global: { name: "tom" },
router: [ HelloWord ]
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
Injectable
class UserInjectable{
private config: any;
constructor(config: any){
this.config = config;
}
public name2: string = 'cc';
}
@Router({})
class HelloWord{
//用于获取注入器实例
@Injectable('text-injectable') private global: any;
}
Main({
global: { name: 'tom' },
router: [ HelloWord ],
injectable: [ { class: UserInjectable, name: 'text-injectable', data: { name: 'tom' } } ]
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
FindByName
用于获取kvl实例化的router对象
//获取全部router实例
const kvlRouters = FindByName();
/**
* 搜索class.name是FindByName的实例
* FindByName不具有唯一性,会返回所有名字相同的实例
*/
const hello = FindByName('FindByName');
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
FindById
根据id获取kvl实例化的router对象
/**
* 根据传进来的id搜寻相应的路由实例
*/
const hello = FindById('[router.id]');
1
2
3
4
5
6
2
3
4
5
6