面试题答案
一键面试TypeScript装饰器在NestJS框架中定义控制器的原理
- 元数据(Metadata)机制:TypeScript装饰器允许在类、方法、属性等上面附加额外的元数据。NestJS利用这一特性,通过装饰器在控制器类上添加有关该控制器的各种元数据,如路由信息、中间件、守卫等配置。
- 反射(Reflection)机制:NestJS借助TypeScript的反射能力,在运行时能够读取这些通过装饰器附加的元数据。这样框架就可以根据这些元数据来确定如何创建、管理和使用控制器,比如如何将HTTP请求映射到控制器的相应方法。
举例说明如何使用装饰器为控制器设置路由前缀
import { Controller, Get, Module } from '@nestjs/common';
// 使用@Controller装饰器定义控制器,并设置路由前缀为'users'
@Controller('users')
export class UsersController {
@Get()
findAll() {
return 'This action returns all users';
}
}
@Module({
controllers: [UsersController]
})
export class UsersModule {}
在上述代码中,@Controller('users')
装饰器将UsersController
类标记为一个控制器,并设置了路由前缀为users
。这样,findAll
方法对应的完整路由就是/users
,当有GET请求发送到/users
时,findAll
方法就会被调用。