装饰器

http method 装饰器

Daruk 通过装饰器定义 http method,也可以通过装饰器参数进一步定义路由的 path。所有的 http method 装饰器如下:

  • @get
  • @post
  • @del,由于 delete 是 js 的关键字,因此用 del 代替 delete
  • @put
  • @patch
  • @options
  • @head
  • @all

示例:

import { BaseController, get, post, del, put } from 'daruk'

export default class ContactList extends BaseController {
  @get('/')
  public async getHandle () {

  }
  @post('/somePath')
  public async postHandle () {
    
  }
  @del('/somePath')
  public async delHandle () {
    
  }
  @put('/')
  public async putHandle () {
    
  }
}

框架装饰器

Daruk 会自动将约定目录中的内容挂载到 Daruk 实例或者 context,但在不方便拿到 Daruk 实例后者 context 的地方要怎么获取这些内容呢。这时,框架级的装饰器就派上用场了。支持的框架装饰器有:

  • @config,注入项目配置,可以接收一个字符串参数,指定要注入配置中的某个字段的内容
  • @util,注入 util,可以接收一个字符串参数,指定要注入的 util 名
  • @glue,注入 glue,可以接收一个字符串参数,指定要注入的 glue 名
  • @logger,注入 logger,可以接收一个字符串参数,自定义 fileInfo,对应 KoaLogger.customFileInfo

示例:

// src/glues/mysql/connect.ts
import { Daruk, config, util, glue, logger } from 'daruk'

export default class MySqlConnector {
  // 注入项目配置中的 mysql 配置
  @config('mysql')
  public mysqlConfig: Daruk['config']['mysqlConfig'];
  // 注入 util
  @util()
  public util: Daruk['util'];
  // 注入 glue 中的 validator 模块
  @glue('validator')
  public validator: Daruk['glue']['validator'];
  // 注入 logger,并自定义 logger 的 fileInfo
  @logger('MySqlConnector')
  public logger: Daruk['logger'];
}

中间件装饰器

有时候我们希望对单个路由应用一个中间件,这时可以使用中间件装饰器:

  • @middleware,接收一个字符串参数,指定要应用的中间件的名字,名字由 middlewares 目录或 daruk.config.ts 中定义的 middleware 确定

示例:

// src/controllers/user.ts
import { BaseController, post } from 'daruk'

export default class User extends BaseController {
  @middleware('login-validator')
  @post('/login')
  public index () {

  }
}