NestJS 基本理论(上): 解密 NestJS 的核心机制
2023-10-25 08:19:31
- NestJS 控制器
NestJS 控制器是处理 HTTP 请求的类。控制器通常负责处理路由和业务逻辑。在 NestJS 中,控制器使用 @Controller()
装饰器进行装饰。例如:
import { Controller, Get } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get()
findAll() {
return 'This action returns all cats';
}
}
2. NestJS 提供者
NestJS 提供者是向控制器和其他组件提供依赖项的类。提供者通常使用 @Injectable()
装饰器进行装饰。例如:
import { Injectable } from '@nestjs/common';
@Injectable()
export class CatsService {
findAll() {
return 'This action returns all cats';
}
}
3. NestJS 模块
NestJS 模块是将相关组件组合在一起的逻辑分组。模块通常使用 @Module()
装饰器进行装饰。例如:
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
@Module({
controllers: [CatsController],
providers: [CatsService],
})
export class CatsModule {}
4. NestJS 中间件
NestJS 中间件是在请求处理过程中执行的函数。中间件通常用于日志记录、身份验证和授权。在 NestJS 中,中间件使用 @Middleware()
装饰器进行装饰。例如:
import { MiddlewareConsumer, NestMiddleware } from '@nestjs/common';
export class LoggerMiddleware implements NestMiddleware {
use(req, res, next) {
console.log('Request...');
next();
}
}
export function logger(consumer: MiddlewareConsumer) {
consumer.apply(LoggerMiddleware).forRoutes('*');
}
5. NestJS 异常处理
NestJS 异常处理用于处理请求处理过程中发生的错误。在 NestJS 中,异常处理使用 @Catch()
装饰器进行装饰。例如:
import { ExceptionFilter, Catch, ArgumentsHost } from '@nestjs/common';
@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse();
const request = ctx.getRequest();
const status = exception.getStatus();
response.status(status).json({
statusCode: status,
timestamp: new Date().toISOString(),
path: request.url,
error: exception.message,
});
}
}
6. NestJS 管道
NestJS 管道是在请求处理过程中对请求和响应进行转换的函数。管道通常用于验证、解析和格式化数据。在 NestJS 中,管道使用 @Pipe()
装饰器进行装饰。例如:
import { PipeTransform, Injectable, ArgumentMetadata } from '@nestjs/common';
@Injectable()
export class TrimPipe implements PipeTransform {
transform(value: string, metadata: ArgumentMetadata) {
return value.trim();
}
}
7. NestJS 守卫
NestJS 守卫是在请求处理过程中对请求进行授权的函数。守卫通常用于检查用户是否具有访问特定资源的权限。在 NestJS 中,守卫使用 @Guard()
装饰器进行装饰。例如:
import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
@Injectable()
export class AuthGuard implements CanActivate {
canActivate(context: ExecutionContext): boolean {
const request = context.switchToHttp().getRequest();
return request.isAuthenticated();
}
}
8. NestJS 拦截器
NestJS 拦截器是在请求处理过程中对请求和响应进行拦截的函数。拦截器通常用于日志记录、性能监控和错误处理。在 NestJS 中,拦截器使用 @Intercept()
装饰器进行装饰。例如:
import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable } from 'rxjs';
@Injectable()
export class LoggingInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
console.log('Before...');
const now = Date.now();
const request = context.switchToHttp().getRequest();
return next
.handle()
.pipe(
tap(() => console.log(`After... ${Date.now() - now}ms`)),
);
}
}
9. NestJS 装饰器
NestJS 装饰器是向类、方法和属性添加元数据的函数。装饰器通常用于配置组件、注入依赖项和处理异常。在 NestJS 中,装饰器使用 @
符号进行装饰。例如:
import { Controller, Get } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get()
findAll() {
return 'This action returns all cats';
}
}
在本文中,我们讨论了 NestJS 的核心机制,包括控制器、提供者、模块、中间件、异常处理、管道、守卫和拦截器。这些机制为构建高性能、可扩展的服务器端应用程序提供了强大的基础。