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

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

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

Router


@Router({
	name: '',						//类的名字,区分定义使用
	url: '',						//类下所有包括router下的请求都会带有此url
	router: [],						//路由class对象,@Router生成
	interceptor: function(){},		//类拦截器
	interceptorLevel: 1				//拦截器级别
}) 

1
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

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

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

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

FindByName

用于获取kvl实例化的router对象

//获取全部router实例
const kvlRouters = FindByName();
/**
 * 搜索class.name是FindByName的实例
 * FindByName不具有唯一性,会返回所有名字相同的实例
 */
const hello = FindByName('FindByName');

1
2
3
4
5
6
7
8

FindById

根据id获取kvl实例化的router对象


/**
 * 根据传进来的id搜寻相应的路由实例
 */
const hello = FindById('[router.id]');

1
2
3
4
5
6