Skip to content
On this page

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/** 用于解析用户的输入,处理后返回相应的结果,具体可参考Controller
  • src/app/plugin/** 用于编写kever插件,可选,具体可参考Middleware
  • src/app/service/** 用于编写业务逻辑层,可选,具体可参考Service
  • src/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由ControllerGet二者参数的组合,如上面代码,路由path为/index

目前为止,一个简单的web服务就创建完成了。