Skip to content
/ kost Public

基于Koa,使用Typescript开发的Web框架

License

Notifications You must be signed in to change notification settings

axetroy/kost

Repository files navigation

Kost

Build Status Coverage Status Dependency License Prettier Node npm version Size

Kost 基于 Koa,使用 Typescript 编写,借鉴于 egg 的约定大于配置的思想以及 nest 的依赖注入和装饰器路由。

是一款内置多个功能,并遵循一系列规范的 Web 框架

特性

  • 依赖注入
  • 使用 Typescript 编写
  • 装饰器风格的路由定义
  • 支持中间件,包括 Koa 的中间件
  • 引入服务的概念
  • 支持加载不同环境下的配置文件
  • 兼容 Koa 中间件

内置特性

  • Http/Websocket 的代理
  • 静态文件服务
  • 解析 Http Body
  • 视图引擎
  • 跨域资源分享
  • 错误捕捉
  • 定时任务

框架架构

kost

快速开始

npm install @axetroy/kost --save

这是示例的项目目录, 最简单的搭建一个服务

.
├── app.ts
├── controllers
│   └── home.controller.ts
└── tsconfig.json
// app.ts
import Kost from "@axetroy/kost";

const app = new Kost();

app
  .start()
  .then(function(server) {
    console.log(`Listen on ${server.address().port}`);
  })
  .catch(err => {
    console.error(err);
  });
// controllers/home.controller.ts
import { Controller, Get } from "@axetroy/kost";

export default class HomeController extends Controller {
  @Get("/")
  index(ctx) {
    ctx.body = "hello world";
  }
}
$ ts-node ./app.ts

Q & A

Q: 为什么开发这样的框架

A: 框架基于以前的项目经验沉淀而来,首先是坚持 Typescript 不动摇,能在开发阶段避免了很多 bug。

Q: 为什么不使用 nest?

A: 因为它是基于 Express,而我以前的项目都是 Typescript + Koa

Q: 为什么不使用 egg?

A: egg 使用 JS 开发,目前对 Typescript 没有一个很好的方案(见识短,没发现),而且 egg 的 service 会丢失类型 IDE 提示,目前 egg 成员已在着手解决这个问题,期待中...

Q: 与两者的框架区别在哪里?

A: 借鉴了 egg 的约定大于配置的思想,约定了一些文件目录,文件名,如果不按照框架写,就会 boom。借鉴了 nest 的 OOP 编程思想,所有的,包括 Controller、Service、Middleware 都是类,都可以进行依赖注入,而且路由定义是装饰器风格,语法糖会让你更加的直观。对于开发而言,会有很好的 IDE 提示。

Q: 框架内置了一些特性,会不会平白增加性能负担?

A: 根据你是否开启特性,来决定是否引入包,所以不会有性能损耗。

Q: 是否需要配套 CLI 工具?

A: 目前没有,编译成 JS 就能运行,可以用 pm2 进行负载均衡。

Q: 框架是否包含进程管理?

A: 框架本身不进行进程管理,没有类似 egg 的 master 主进程管理子进程,没有 agent

贡献者


Axetroy

💻 🔌 ⚠️ 🐛 🎨

开源许可协议

The MIT License