kever对项目工程目录进行严格的约束,目录约束的目的是kever框架提供自动加载项目文件的能力,内部采用Ioc的方式管理模块依赖,采用依赖注入的方式调用其他模块的方法或属性,不需要手动import某个文件,目录约束如下:
txt
kever-project
├── package.json
├── src
| ├── index.ts
│ ├── app
│ | ├── controller
│ | └── index.ts
│ | ├── plugin (可选)
│ | └── index.js
│ | ├── model (可选)
│ | └── index.js
│ | ├── service (可选)
│ | └── index.js工程目录约束比较简单。
src/index.ts项目主入口,没有约束,位置随意src/app/controller/**用于解析用户的输入,处理后返回相应的结果,具体可参考Controllersrc/app/plugin/**用于编写kever插件,可选,具体可参考Middlewaresrc/app/service/**用于编写业务逻辑层,可选,具体可参考Servicesrc/app/model/**用于编写数据模型层,可选。
由于生产环境是经过Typescript编译后的,因此自动加载的目录结构由tsconfig中的outDir配置决定,例如下面配置:
json
{
"compilerOptions": {
"outDir": "lib"
}
}那么生产环境下kever则会加载工程下lib/app下的文件。
下面开始创建一个web服务。
项目主入口
项目主入口非常简单,仅仅2行代码就可以搞定。
ts
import { createApp } from '@kever/core'
createApp()在@kever/core包中暴露出createApp函数,用来创建一个web服务,默认端口号为8080,需要更改的话通过createApp函数传参进行设置,详细参数参照API。
当然,仅仅两行代码的web服务是不可运行的,由于kever项目是严格遵守MVC模式的,因此还需要有一个Controller来处理请求。
Controller
Controller需要严格遵守目录结构,因此代码需要写在src/app/controller下。
ts
// src/app/controller/index.ts
import { Controller, Context } from '@kever/core'
import { Get } from '@kever/router'
@Controller('/')
export class IndexController {
@Get('/index')
ready(ctx: Context) {
ctx.body = 'Hello world'
}
}在@kever/core包中暴露出Controller装饰器,被Controller修饰的类会被kever标记为控制器。
我们还可以看到在@kever/router包中暴露出Get装饰器,被Get修饰的类方法会被kever标记成http get请求。
当项目启动的时候,kever扫描项目中所有的Controller,并将所有被标记为路由的方法通过koa-router注册成路由,路由的path由Controller与Get二者参数的组合,如上面代码,路由path为/index。
目前为止,一个简单的web服务就创建完成了。