1.0 版

单函数中间件

单函数中间件即只针对单个函数生效的 Web 中间件。

在 Midway Hooks 中,可以通过 withController 来支持单函数级别的中间件。全局中间件可参考:使用 Web 中间件

Demo 的 loggerclassMiddleware 就是 Web 中间件。

使用函数中间件

  1. import { withController } from '@midwayjs/hooks'
  2. import { FaaSContext } from '@midwayjs/faas'
  3. const logger = async (ctx: FaaSContext, next) => {
  4. const start = Date.now()
  5. await next()
  6. const cost = Date.now() - start
  7. console.log(`request ${ctx.url} cost ${cost}ms`)
  8. }
  9. export default withController({
  10. middleware: [logger]
  11. }, () => {
  12. return 'Hello Controller'
  13. })

使用 IoC 中间件

  1. import { withController } from '@midwayjs/hooks'
  2. import { FaaSContext } from '@midwayjs/faas'
  3. import { Provide, ScopeEnum, Scope } from '@midwayjs/decorator'
  4. @Provide('classMiddleware')
  5. @Scope(ScopeEnum.Singleton)
  6. export class ClassMiddleware {
  7. resolve() {
  8. return async (ctx: FaaSContext, next) => {
  9. ctx.query.from = 'classMiddleware'
  10. await next()
  11. }
  12. }
  13. }
  14. export default withController({
  15. middleware: ['classMiddleware']
  16. }, () => {
  17. return 'Hello Controller ' + ctx.query.from
  18. })

API

withController

通过 withController 增强函数功能,第一个参数是 controller 配置,第二个参数是要执行的 FaaS 函数。

其中 controller 配置如下

  • middleware(any[]):可选参数,用于给当前的函数增加中间件功能,可以同时传入多个中间件。支持函数定义的中间件及 IoC 定义的中间件。

类型定义

  1. type Controller = {
  2. middleware?: any[];
  3. };
  4. function withController(controller: Controller, func);