报错信息
Error: Cannot set headers after they are sent to the client
解决方案
在控制器方法参数中加上@Res() res: Response
,成功解决!
@Res()装饰器在NestJS框架中可以直接访问底层平台的响应对象,也就是说,一旦使用了@Res()装饰器,就可以使用该响应对象来直接控制将发送给客户端的响应。通俗一点,就是可以调用响应对象上的各种方法,比如设置响应头、状态码、发送响应主体等。
import { Controller, Get, Res } from '@nestjs/common';
import { Response } from 'express';
@Controller('test')
export class CatsController {
@Get()
testRes(@Res() res: Response) {
res.status(200).send('测试成功!');
}
}
排错过程
使用TypeScript做后端接口开发时遇到上述报错信息,起初怀疑是异步的问题,仔细检查了一遍service和repository,没有问题,最后才检查controller,解决报错。
分析:
- 分析报错信息,应该是请求相关的问题
- 那么直接去找controller,控制器负责接收路由请求和返回响应
这样先仔细分析报错信息、确定范围,才能提高解决问题的效率!