假设您有一个路由 'users/:userId' 并且您想将 userId 自动转换为用户模型。
步骤 1
通过命令创建管道
nest g pipe your-module/pipes/pipe-name/pipe-name
管道已创建,但管道不是 Nest 应用程序的依赖注入系统的完整部分。
第二步
通过将管道添加到控制器模块的提供者列表中,使其成为DI系统的一部分。
假设它的 UserModule
@Module({
imports: [],
constrollers: [UserController]
providers: [PipeNamePipe]
})
class UserModule {}
第三步
在它的构造函数中注入管道需要的任何服务也是 UserModule 的一部分,或者确保提供程序在应用程序中全局可用
例如让我们把 AuthService 本来是 AuthModule 的一部分,在 UserModule 中不可用,所以我们将通过 providers 数组注入它。
@Module({
imports: [],
constrollers: [UserController]
providers: [PipeNamePipe, AuthService]
})
class UserModule {}
第三步
让我们完成 PipeNamePipe 的实现。
记住管道可以返回任何值。它可以是 Promise、Observable 或静态值。例如,我们将返回承诺。
@Injectable()
class PipeNamePipe implments PipeTransform {
construtor(private authService: AuthService){}
transform(value: any): Promise<User> {
return this.authService.findUser(value);
}
}
第四步
在您的控制器中,只需将管道传递给参数
@Controller('users')
class UserController {
@Get(':userId')
show(
@Param('userId', PipeNamePipe) user: User
) {
// the value of userId will be converted to user instance through auth service.
}
}