一个简单够用的node web框架
发布于 5 年前 作者 my-soul 3544 次浏览 来自 分享

souljs

A nodejs web framework, 对koa简单包装,装饰风格,内置开发常用中间件,使用typescript编写

安装

git clone https://github.com/my-soul/souljs-starter.git

npm install && npm run start

Node.js >= 8.0.0 required.

快速开始

创建应用实例

import { createApplication } from 'souljs';

async function main() {
  const app = await createApplication(__dirname, 'controller/*.ts');

  app.listen(8080);
}

main();

路由处理并返回数据

[@Controller](/user/Controller)('/user')
export default class User {

  [@Post](/user/Post)('/chname')
  changeName() {
    return ‘hello world’;
  }
}

通过@Render返回视图

[@Controller](/user/Controller)('/user')
@Use(Auth())
export default class User {

  [@Get](/user/Get)()
  [@Render](/user/Render)('user')
  index() {
    return { content: 'hi' };
  }
}

请求参数验证

[@Controller](/user/Controller)('/user')
export default class User {

  [@Post](/user/Post)('/chname')
  @QuerySchame(joi.object().keys({
    id: joi.string()
  }))
  @BodySchame(joi.object().keys({
    name: joi.string().required()
  }))
  changeName([@Body](/user/Body)() body: any, [@Query](/user/Query)() query: any) {
    return ResultUtils.ok(body);
  }
}

接口描述

接口文档默认访问地址: /swagger-ui/index.html

[@Controller](/user/Controller)('/user')
@ApiUseTags('user')
@ApiDescription('用户信息')
export default class User {

  [@Post](/user/Post)('/hi')
  @ApiDescription('test')
  test() {}
}

API

createApplication(root, controllers, options): Application

  • 参数

    • { string } root - 项目路径
    • { string | controller[] } controllers - 控制器的目录位置,使用globs匹配,或者是控制器类的数组
    • { ApplicationOptions } options - 参考如下ApplicationOptions, 值false不启用功能
      interface ApplicationOptions {
        staticAssets?: { root: string; prefix?: string } | boolean; // koa-static'
        swagger?: { url: string; prefix?: string } | boolean; // swagger-ui
        bodyparser?: Bodyparser.Options | boolean; // koa-bodyparser
        session?: KoaSession.opts | boolean; // koa-session
        hbs?: { viewPath?: string } | boolean; // koa-hbs
        helmet?: object | boolean; // koa-helmet
      }
    
  • 返回值:Application

Application

实例方法

  • use(mid: Koa.Middleware)

  • listen(port: number)

  • getKoaInstance(): Koa

  • getHttpServer(): http.Server

http请求装饰器

内部使用koa-router中间件,提供对应的方法的装饰器

@Render(view: string) 模板渲染

不能禁用hbs

使用Joi验证请求参数

  • BodySchame(schame: joi.AnySchema)

  • QuerySchame(schame: joi.AnySchema)

控制器处理方法参数注入

[@Post](/user/Post)('/test')
test([@Body](/user/Body)() Body: any, [@Query](/user/Query)() query: any) {}
  

提供如下修饰器

1 回复

👏

来自酷炫的 CNodeMD

回到顶部