NestJs — это мощная платформа для создания серверных приложений с помощью Node.js. Он предоставляет широкий спектр функций и инструментов, которые помогают разработчикам создавать масштабируемые, удобные в сопровождении и надежные приложения. В этой статье мы рассмотрим некоторые передовые методы в NestJ, включая ведение журнала и обработку ошибок.
Предпосылки
Давайте начнем углубляться в передовые методы NestJ для реализации ведения журнала и обработки ошибок с помощью встроенных декораторов и пакетов.
Ведение журнала
Ведение журнала — важный метод отладки и мониторинга вашего приложения. Он включает в себя запись сообщений или событий, происходящих во время выполнения вашего приложения.
NestJs предоставляет встроенную поддержку ведения журналов с использованием различных поставщиков журналов, таких как Winston, Bunyan и других. Например, чтобы использовать Winston в качестве поставщика журналов, вы можете установить пакет @nestjs/platform-winston
и добавить в свое приложение следующий код:
Перед внедрением кода установите следующие модули:
Обновите файл app.module.ts
, указав следующие коды:
// app.module.ts import { Logger, Module } from '@nestjs/common'; import { WinstonModule } from 'nest-winston'; import * as winston from 'winston'; @Module({ imports: [ WinstonModule.forRoot({ transports: [ new winston.transports.Console({ format: winston.format.combine( winston.format.timestamp(), winston.format.colorize(), winston.format.printf((info) => `${info.timestamp} ${info.level}: ${info.message}`), ), }), ], }), ], })
Этот код регистрирует Winston в качестве поставщика ведения журналов с консольным транспортом. Затем вы можете использовать экземпляр logger
для регистрации сообщений:
// products.controller.ts import { Controller, Get } from '@nestjs/common'; @Controller('products') export class ProductsController { private readonly logger = new Logger(ProductsController.name); @Get() async findAll(): Promise<Product[]> { this.logger.log('Get all products api is called by StackBlogger!'); // Retrieve products from the database const products = await this.productsService.findAll(); this.logger.log(`${products.length} Records were returned to the response`); return products; } }
В этом примере метод findAll()
регистрирует сообщение, используя экземпляр logger
.
Обработка ошибок
Обработка ошибок — важный метод обработки ошибок, возникающих во время выполнения вашего приложения. Он включает в себя перехват и обработку ошибок таким образом, чтобы предотвратить сбой приложения или получение неправильных результатов.
NestJs предоставляет встроенную поддержку обработки ошибок с использованием различных поставщиков обработки ошибок, таких как встроенный HttpExceptionFilter
, который обрабатывает исключения HTTP. Например, чтобы использовать HttpExceptionFilter
, вы можете добавить в свое приложение следующий код:
// http-exception.filter.ts import { Catch, HttpException, ExceptionFilter, 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 status = exception.getStatus(); const message = exception.getResponse() as string; response.status(status).json({ statusCode: status, message, }); } }
Этот код определяет HttpExceptionFilter
, который перехватывает HttpException
экземпляров и возвращает ответ JSON с кодом состояния и сообщением.
Затем вы можете использовать декоратор @UseFilters()
, чтобы применить фильтр к контроллеру или методу:
// products.controller.ts import { Controller, Get, NotFoundException, UseFilters } from '@nestjs/common'; @Controller('products') @UseFilters(HttpExceptionFilter) export class ProductsController { @Get(':id') async findOne(@Param('id') id: string): Promise<Product> { const product = await this.productsService.findOne(id); if (!product) { throw new NotFoundException(`Product with ID ${id} not found`); } return product; } }
В этом примере метод findOne()
выдает NotFoundException
, если продукт с указанным идентификатором не найден. HttpExceptionFilter
перехватывает это исключение и возвращает ответ JSON с кодом состояния 404 и сообщением.
Заключение
В этой статье мы рассмотрели некоторые передовые методы в NestJ, включая ведение журнала и обработку ошибок. Эти методы могут помочь вам создавать масштабируемые, удобные в сопровождении и надежные приложения. Используя встроенные поставщики и декораторы, вы можете легко реализовать эти методы в своем приложении.
Первоначально опубликовано на https://stackblogger.com 5 мая 2023 г.