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 г.