成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Nestjs 項目中,這九個裝飾器是必不可少的!

開發 項目管理
Nestjs 項目中,這 9 個裝飾器分別為權限驗證裝飾器 - @Roles(),請求日志裝飾器 - @LogRequest(),緩存裝飾器 - @Cache()等。

前言

大家好,我是林三心,用最通俗易懂的話講最難的知識點是我的座右銘,基礎是進階的前提是我的初心~

一、權限驗證裝飾器 - @Roles()

基于角色的訪問控制(RBAC),限制接口訪問權限

// src/decorators/roles.decorator.ts
import { SetMetadata } from'@nestjs/common';

// 定義角色枚舉
exportenum UserRole {
  ADMIN = 'admin',
  EDITOR = 'editor',
  USER = 'user'
}

/**
 * 角色權限裝飾器
 * @param roles 允許訪問的角色數組
 * 使用示例:@Roles([UserRole.ADMIN])
 */
exportconst Roles = (...roles: UserRole[]) => SetMetadata('roles', roles);

// 在守衛中使用:
@Injectable()
exportclass RolesGuard implements CanActivate {
constructor(private reflector: Reflector) {}

  canActivate(context: ExecutionContext): boolean {
    const requiredRoles = this.reflector.get<UserRole[]>(
      'roles',
      context.getHandler()
    );
    // ...驗證邏輯
  }
}

二、請求日志裝飾器 - @LogRequest()

自動記錄完整的HTTP請求信息

// src/decorators/log-request.decorator.ts
import { createParamDecorator, ExecutionContext } from'@nestjs/common';

/**
 * 記錄請求完整信息
 * 使用示例:@LogRequest()
 */
exportconst LogRequest = createParamDecorator(
(data: unknown, ctx: ExecutionContext) => {
    const request = ctx.switchToHttp().getRequest();
    return {
      url: request.url,
      method: request.method,
      headers: request.headers,
      body: request.body,
      timestamp: newDate().toISOString()
    };
  }
);

// 在控制器中使用:
@Get()
async findOne(@LogRequest() logData: any) {
// logData會包含完整的請求信息
}

三、緩存裝飾器 - @Cache()

聲明式接口響應緩存,提升性能

// src/decorators/cache.decorator.ts
import { applyDecorators, UseInterceptors } from'@nestjs/common';
import { CacheInterceptor } from'@nestjs/cache-manager';

/**
 * 自定義緩存裝飾器
 * @param ttl 緩存時間(秒)
 * 使用示例:@Cache(60)
 */
exportfunction Cache(ttl: number) {
return applyDecorators(
    UseInterceptors(CacheInterceptor),
    SetMetadata('cacheTTL', ttl)
  );
}

// 在服務層配置:
@Injectable()
exportclass CustomCacheInterceptor extends CacheInterceptor {
protected trackBy(context: ExecutionContext): string | undefined {
    const ttl = this.reflector.get<number>('cacheTTL', context.getHandler());
    // ...自定義緩存邏輯
  }
}

四、事務管理裝飾器 - @Transactional()

自動管理數據庫事務,保證數據一致性

// src/decorators/transaction.decorator.ts
import { Transaction } from'typeorm-transactional';

/**
 * 數據庫事務裝飾器
 * 使用示例:@Transactional()
 */
exportconst Transactional = () => (
  target: any,
  propertyKey: string,
  descriptor: PropertyDescriptor
) => {
const originalMethod = descriptor.value;

  descriptor.value = asyncfunction (...args: any[]) {
    return Transaction({ isolationLevel: 'READ COMMITTED' })( 
      originalMethod.bind(this)
      .apply(this, args)
    );
  };
return descriptor;
};

五、參數驗證裝飾器 - @ValidateId()

參數格式預校驗,防止非法輸入

// src/decorators/validate-param.decorator.ts
import { 
  createParamDecorator,
  BadRequestException 
} from'@nestjs/common';

/**
 * ID參數格式驗證
 * 使用示例:@ValidateId() id: string
 */
exportconst ValidateId = createParamDecorator(
(data: unknown, ctx: ExecutionContext) => {
    const request = ctx.switchToHttp().getRequest();
    const id = request.params.id;
    
    if (!/^[a-f\d]{24}$/i.test(id)) {
      thrownew BadRequestException('Invalid ID format');
    }
    return id;
  }
);

六、響應格式裝飾器 - @StandardResponse()

統一API響應格式規范

// src/decorators/response-format.decorator.ts
import { 
  applyDecorators,
  Type,
  HttpCode,
  Header 
} from'@nestjs/common';
import { ApiResponse } from'@nestjs/swagger';

/**
 * 統一響應格式
 * @param status HTTP狀態碼
 * @param type 響應數據類型
 * 使用示例:@StandardResponse(200, UserDto)
 */
exportfunction StandardResponse<T>(status: number, type?: Type<T>) {
return applyDecorators(
    HttpCode(status),
    Header('Content-Type', 'application/json'),
    ApiResponse({ 
      status,
      type,
      description: 'Standard API response'
    })
  );
}

七、性能監控裝飾器 - @Benchmark()

方法執行耗時監控與日志記錄

// src/decorators/benchmark.decorator.ts
import { Logger } from'@nestjs/common';

const logger = new Logger('Benchmark');

/**
 * 方法執行時間監控
 * 使用示例:@Benchmark()
 */
exportfunction Benchmark() {
returnfunction (
    target: any,
    propertyKey: string,
    descriptor: PropertyDescriptor
  ) {
    const originalMethod = descriptor.value;
    
    descriptor.value = asyncfunction (...args: any[]) {
      const start = Date.now();
      try {
        returnawait originalMethod.apply(this, args);
      } finally {
        const duration = Date.now() - start;
        logger.log(`${propertyKey} executed in ${duration}ms`);
      }
    };
    return descriptor;
  };
}

八、多語言支持裝飾器 - @Translate()

便捷獲取國際化翻譯內容

// src/decorators/i18n.decorator.ts
import { createParamDecorator } from'@nestjs/common';
import { I18nService } from'nestjs-i18n';

/**
 * 獲取當前語言文本
 * 使用示例:@Translate() t: I18nService['translate']
 */
exportconst Translate = createParamDecorator(
(data: unknown, ctx: ExecutionContext) => {
    const i18n = ctx.switchToHttp().getRequest().i18nService as I18nService;
    return(key: string, options?: any) => i18n.translate(key, options);
  }
);

九、版本控制裝飾器 - @ApiVersion()

API多版本共存管理

// src/decorators/version.decorator.ts
import { Controller, SetMetadata, applyDecorators } from'@nestjs/common';
import { Version } from'@nestjs/common';

/**
 * API版本控制裝飾器
 * @param versions 支持的版本數組
 * 使用示例:@ApiVersion(['1', '2'])
 */
exportfunction ApiVersion(versions: string[]) {
return applyDecorators(
    SetMetadata('apiVersions', versions),
    Version(versions)
  );
}

// 在控制器中使用:
@ApiVersion(['1', '2'])
@Controller('users')
exportclass UsersController {}
責任編輯:武曉燕 來源: 前端之神
相關推薦

2020-06-17 08:23:08

Kubernetes插件擴展

2022-03-14 14:36:31

大數據數據分析急速

2018-01-10 22:31:07

機器學習開源開發

2011-03-21 14:08:57

2020-05-18 13:35:03

Web前端開源框架

2011-03-22 15:58:35

私有云

2020-04-15 16:10:24

Web前端開源框架

2013-08-28 10:15:24

iOS開發者工具

2020-04-15 10:26:47

Web前端開發開源框架

2025-05-19 19:01:14

MCPAPILLM

2021-07-05 10:20:04

IT安全首席信息安全官網絡安全

2023-08-22 14:20:21

2020-05-29 15:45:39

Windows 10Windows微軟

2019-11-13 16:29:12

物聯網設計工程師

2009-07-01 11:08:21

Firefox插件推薦

2020-10-23 10:31:59

開發開源工具開源

2013-04-24 09:22:54

2013-07-24 09:22:59

BYOA自備應用程序云應用

2013-08-26 10:10:23

2021-03-21 22:32:23

5G網絡安全網絡攻擊
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黄网站免费入口 | 天天综合国产 | 亚洲欧美中文日韩在线v日本 | 国产一区二区欧美 | 日韩一区二区在线视频 | 欧美一级片在线 | 欧美一级在线免费 | 国产精品一区久久久 | 日韩中文字幕在线观看 | 一区二区三区精品在线 | 国产精品久久久久久婷婷天堂 | 亚洲国产成人精品久久久国产成人一区 | 91资源在线播放 | 国产99久久精品一区二区永久免费 | 精品欧美一区二区久久久伦 | 成年人精品视频在线观看 | 国际精品鲁一鲁一区二区小说 | 精品伊人久久 | 国产精品久久久久aaaa樱花 | 天天干,夜夜操 | 久久久久久91香蕉国产 | 中文字幕1区2区3区 亚洲国产成人精品女人久久久 | 久久国产精品一区二区三区 | 久久久精品视频一区二区三区 | 一区欧美 | 精品日韩在线 | 九九亚洲 | 99资源| 国产一区二区在线免费观看 | 羞羞在线观看视频 | 久久精品国产99国产精品 | 国产成人精品一区二区三区在线观看 | 日本一区二区三区在线观看 | 男女视频在线观看网站 | 亚洲先锋影音 | 少妇一级淫片免费放播放 | 一区二区三区国产视频 | 久久久www成人免费无遮挡大片 | 91麻豆精品一区二区三区 | 国产精品久久av | 欧日韩在线观看 |