根据文档我开发了nest.js
异常过滤器。
https://docs.nestjs.com/exception-filters
我想知道如何在我的服务
中使用catch
函数
我想将此异常过滤器
应用到服务
因为我是初学者。有什么好的方法来应用exceptionfilter
吗?
如果有人有意见,请告诉我。谢谢
import {
ArgumentsHost,
Catch,
HttpException,
HttpStatus,
Logger,
} from '@nestjs/common';
import { Request, Response } from 'express';
@Catch()
export class HttpExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
console.log("exception",exception.getResponse());
const ctx = host.switchToHttp();
const response = ctx.getResponse<Response>();
const request = ctx.getRequest<Request>();
const status =
exception instanceof HttpException
? exception.getStatus()
: HttpStatus.INTERNAL_SERVER_ERROR;
const errorResponse = {
code: status,
timestamp: new Date().toLocaleDateString(),
path: request.url,
method: request.method,
message: exception.message || null,
error: exception.Error;
};
Logger.error(
`${request.method} ${request.url}`,
JSON.stringify(errorResponse),
'ExceptionFilter',
);
response.status(status).json(errorResponse);
}
}
我的服务如下
import { Injectable, InternalServerErrorException } from '@nestjs/common';
import { eventRepository } from 'src/repositories/event.repository';
import { EventRequest } from './dto/event.dto';
import { Event } from 'src/entities/event.entity';
import { InsertResult, Like } from 'typeorm';
@Injectable()
export class EventService {
constructor(private readonly eventRepository: eventRepository) {}
async createEvent(eventParam: EventRequest): Promise<Event> {
const event = new Event();
Object.entries(eventParam).forEach(param => {
event[param[0]] = param[1];
});
try {
const insertResult = await this.eventRepository.insert(event);
const id = insertResult.identifiers[0].id
const Result = await this.eventRepository.findOne(id);
return Result;
} catch (error) {
console.log(error);
throw new InternalServerErrorException();
}
}
}
最佳答案
首先是您错过的细节:
您必须使您的HttpExceptionFilter
实现ExceptionFilter
。
不幸的是,只有三个范围可以应用这样的过滤器:method-scoped, controller-scoped, or global-scoped 。如果您想将过滤器应用到您的服务,您可能需要将过滤器应用到实现您的 EventService
的 Controller ,如下所示:
@UseFilters(new HttpExceptionFilter())
@Controller()
export class YourEventController {}
关于typescript - 如何在nest.js中使用异常过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64442704/