在 Nest.js 应用程序中,@nestjs/common
包扮演了非常核心和基础的角色。以下是它的一些主要用途和功能:
1. 提供基础模块和服务
@nestjs/common
包含了许多基础的模块和服务,这些是构建任何 Nest.js 应用程序的基础。例如,它提供了Module
装饰器用于定义模块,Injectable
装饰器用于定义可以注入的服务等。
2. 异常处理
该包提供了一系列的异常类,如HttpException
和其他派生的异常类(例如NotFoundException
或BadRequestException
),使得错误处理变得更加统一和简便。通过这些预定义的异常,开发者可以更容易地管理错误和提供更一致的错误响应。
3. 管道(Pipes)
@nestjs/common
还提供了管道的功能,例如ValidationPipe
。管道用于处理输入数据的转换和验证。例如,使用ValidationPipe
可以自动根据类验证器(class-validator)库中的装饰器来校验传入的请求数据,确保数据符合预期格式。
4. 守卫(Guards)
守卫是用于授权和认证的组件。在@nestjs/common
中,可以找到CanActivate
接口,它是所有守卫必须实现的接口。通过实现这个接口,开发者可以控制是否允许特定的请求通过,从而保护应用程序的敏感路由。
5. 拦截器(Interceptors)
拦截器允许开发者在函数执行之前和之后插入额外的逻辑。这在很多场景下都非常有用,比如日志记录、异常映射、响应转换等。@nestjs/common
提供了CallHandler
和ExecutionContext
等接口和类来帮助开发者实现这些功能。
6. 装饰器(Decorators)
该包还提供了许多有用的自定义装饰器,例如@Req()
,@Res()
,@Query()
等,这些装饰器可以用来从请求对象中提取数据。
示例
例如,如果我们需要在我们的应用程序中实现一个简单的用户权限验证系统,我们可能会使用@nestjs/common
中的守卫功能:
typescript// user.guard.ts import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common'; @Injectable() export class UserGuard implements CanActivate { canActivate(context: ExecutionContext): boolean { const request = context.switchToHttp().getRequest(); return request.session.user.isAdmin; } }
在这个例子中,UserGuard
类使用了@nestjs/common
包中的CanActivate
接口。这个守卫检查请求中的用户是否是管理员,如果是,则请求可以继续执行;如果不是,则请求会被拒绝。
总结来说,@nestjs/common
包为开发者提供了许多核心功能和工具,是构建Nest.js应用程序的基石。