📅  最后修改于: 2023-12-03 15:17:51.182000             🧑  作者: Mango
本文将介绍如何在 NestJS 中返回错误响应。
NestJS 是一个基于 TypeScript 的 Node.js 框架,可以帮助开发人员构建高效、可扩展的服务器端应用程序。它提供了一种简单而又强大的方式来处理错误,并返回适当的响应。
在 NestJS 中,可以在控制器的路由处理程序中返回错误响应。下面是一个示例代码片段:
import { Controller, Get, Res } from '@nestjs/common';
import { Response } from 'express';
@Controller('users')
export class UsersController {
@Get()
getUsers(@Res() res: Response) {
try {
// 在这里处理获取用户的逻辑
// 如果获取用户失败,则抛出一个自定义错误
throw new Error('Failed to get users');
} catch (error) {
// 返回错误响应
res.status(500).json({
error: error.message,
});
}
}
}
在上面的示例中,我们在 getUsers
方法中抛出了一个自定义的错误,然后在 catch
块中返回了一个带有错误信息的 JSON 响应。
NestJS 提供了一个强大的功能,即自定义异常。通过创建自定义异常类,您可以更好地组织和处理错误。下面是一个示例:
import { HttpException, HttpStatus } from '@nestjs/common';
export class CustomException extends HttpException {
constructor(message: string) {
super({ error: message }, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
// 在控制器中使用自定义异常
@Controller('users')
export class UsersController {
@Get()
getUsers() {
throw new CustomException('Failed to get users');
}
}
在上面的示例中,我们创建了一个名为 CustomException
的自定义异常类,并在控制器的 getUsers
方法中抛出该异常。在构造函数中,我们指定了错误消息和 HTTP 状态码。这样,当该异常被抛出时,NestJS 会自动通过该状态码返回错误响应。
除了使用自定义异常,NestJS 还提供了全局异常过滤器的功能。这个过滤器可以捕获应用程序中抛出的所有异常,并返回适当的错误响应。下面是一个示例:
import { ExceptionFilter, Catch, ArgumentsHost, HttpException, HttpStatus } from '@nestjs/common';
import { Response } from 'express';
@Catch()
export class CustomExceptionFilter implements ExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const res = ctx.getResponse<Response>();
// 捕获所有异常,并返回一个带有错误信息的 JSON 响应
res.status(HttpStatus.INTERNAL_SERVER_ERROR).json({
error: exception.message,
});
}
}
// 在应用程序中全局注册异常过滤器
app.useGlobalFilters(new CustomExceptionFilter());
在上面的示例中,我们创建了一个名为 CustomExceptionFilter
的自定义异常过滤器,并将其注册为应用程序的全局过滤器。无论何时抛出异常,该过滤器将捕获异常并返回一个带有错误信息的 JSON 响应。
以上是在 NestJS 中返回错误响应的一些常见方法。您可以根据个人需求选择适合的方法来处理错误并返回适当的响应。
请注意,上述代码仅为示例,并可能需要根据您的应用程序进行适当的调整。