如何从回调中 return json 消息而不是触发错误 | NestJs文件上传
How to return json message from callback instead of triggering error | NestJs File upload
我正在处理 Nestjs Multer 文件上传,我已经为 FileInterceptor 创建了一个文件过滤器,我想发回响应而不是发送错误,我必须发送 JSON 消息为“不支持文件类型。
export const FileFilter = (req, file, callback) => {
if (!file.originalname.match(/\.(jpg|jpeg|png)$/)) {
return callback(new Error('Only image files supported!'), false);
}
callback(null, true);
}
我不想发送新的 Error(),而是发送
res.send({status:"error",message:"File types does not supported"});
此操作由内置的全局异常过滤器执行,该过滤器处理 HttpException 类型的异常(及其子classes)。当无法识别异常时(既不是 HttpException 也不是继承自 HttpException 的 class),内置异常过滤器会生成以下默认 JSON 响应:
{
"statusCode": 500,
"message": "Internal server error"
}
在很多情况下,您不需要编写自定义异常,可以使用内置的 Nest HTTP 异常,如下一节所述。如果您确实需要创建自定义异常,最好创建您自己的异常层次结构,您的自定义异常继承自基础 HttpException class。通过这种方法,Nest 将识别您的异常,并自动处理错误响应。让我们实现这样一个自定义异常:
import { ExceptionFilter, Catch, HttpException, ArgumentsHost, HttpStatus, BadRequestException } from '@nestjs/common';
@Catch()
export class ErrorFilter implements ExceptionFilter {
catch(error: Error, host: ArgumentsHost) {
let response = host.switchToHttp().getResponse();
let status = (error instanceof HttpException) ? error.message: HttpStatus.INTERNAL_SERVER_ERROR;
if (status.statusCode === HttpStatus.BAD_REQUEST) {
return response.status(HttpStatus.BAD_REQUEST).send(status)
}
if (status.statusCode === HttpStatus.NOT_FOUND) {
return response.status(HttpStatus.NOT_FOUND).send(status)
}
if (status.statusCode === HttpStatus.UNAUTHORIZED)
return response.status(status.statusCode).send(status)
if (status.statusCode === HttpStatus.NOT_FOUND)
return response.status(status).send(status)
if (status === HttpStatus.INTERNAL_SERVER_ERROR) {
if (process.env.NODE_ENV === 'production') {
console.error(error.stack);
return response.status(status).render('views/500');
}
else {
let message = error.stack;
return response.status(status).send(message);
}
}
}
}
有关更多详细信息,您可以查看 Nest.js 文档自定义异常过滤器。
我正在处理 Nestjs Multer 文件上传,我已经为 FileInterceptor 创建了一个文件过滤器,我想发回响应而不是发送错误,我必须发送 JSON 消息为“不支持文件类型。
export const FileFilter = (req, file, callback) => {
if (!file.originalname.match(/\.(jpg|jpeg|png)$/)) {
return callback(new Error('Only image files supported!'), false);
}
callback(null, true);
}
我不想发送新的 Error(),而是发送
res.send({status:"error",message:"File types does not supported"});
此操作由内置的全局异常过滤器执行,该过滤器处理 HttpException 类型的异常(及其子classes)。当无法识别异常时(既不是 HttpException 也不是继承自 HttpException 的 class),内置异常过滤器会生成以下默认 JSON 响应:
{
"statusCode": 500,
"message": "Internal server error"
}
在很多情况下,您不需要编写自定义异常,可以使用内置的 Nest HTTP 异常,如下一节所述。如果您确实需要创建自定义异常,最好创建您自己的异常层次结构,您的自定义异常继承自基础 HttpException class。通过这种方法,Nest 将识别您的异常,并自动处理错误响应。让我们实现这样一个自定义异常:
import { ExceptionFilter, Catch, HttpException, ArgumentsHost, HttpStatus, BadRequestException } from '@nestjs/common';
@Catch()
export class ErrorFilter implements ExceptionFilter {
catch(error: Error, host: ArgumentsHost) {
let response = host.switchToHttp().getResponse();
let status = (error instanceof HttpException) ? error.message: HttpStatus.INTERNAL_SERVER_ERROR;
if (status.statusCode === HttpStatus.BAD_REQUEST) {
return response.status(HttpStatus.BAD_REQUEST).send(status)
}
if (status.statusCode === HttpStatus.NOT_FOUND) {
return response.status(HttpStatus.NOT_FOUND).send(status)
}
if (status.statusCode === HttpStatus.UNAUTHORIZED)
return response.status(status.statusCode).send(status)
if (status.statusCode === HttpStatus.NOT_FOUND)
return response.status(status).send(status)
if (status === HttpStatus.INTERNAL_SERVER_ERROR) {
if (process.env.NODE_ENV === 'production') {
console.error(error.stack);
return response.status(status).render('views/500');
}
else {
let message = error.stack;
return response.status(status).send(message);
}
}
}
}
有关更多详细信息,您可以查看 Nest.js 文档自定义异常过滤器。