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服务就创建完成了。