“发送后无法设置标题”-直接设置响应时

时间:2018-11-22 08:36:24

标签: javascript node.js typescript api nestjs

我将NestJS用于我的API服务器,对此感到非常满意。 我的大多数控制器函数都在调用异步函数并返回JSON-就像一个吊饰。

但是在某些控制器功能中,我需要直接将响应/标头/等设置为响应对象,例如:

@Get('api/media')
async getMedia(@Param('id') id: string,
               @Req() req) {
    let result = await getMediaFromBackend(id);
    req.res.set('Content-Type', result.contentType); // need to set content-type dynamically
    req.res.send(result.data); // send non-json response
}

在其他情况下,我需要通过管道传输gzipStream。

它可以工作,但是我总是在控制台中遇到未处理的拒绝:

  

“发送后无法设置标题”

好像NestJS想要在控制器函数返回后设置/覆盖标头。 任何想法如何避免这种情况?我需要一些功能来告诉NestJS,例如“我自己会完全照顾好响应”

非常感谢!

1 个答案:

答案 0 :(得分:1)

因为要注入@Req()并通过req.res访问响应,所以将使用标准的嵌套控制器行为。如果您直接使用@Res,则nest不会弄乱响应对象,并且您可以完全控制它。

@Get('api/media')
async getMedia(@Param('id') id: string,
               @Res() res) {
    let result = await getMediaFromBackend(id);
    res.set('Content-Type', result.contentType); // need to set content-type dynamically
    res.send(result.data); // send non-json response
}