«Не удается установить заголовки после их отправки» - при установке ответа напрямую - PullRequest
0 голосов
/ 22 ноября 2018

Я использую 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 голосов
/ 22 ноября 2018

Поскольку вы вводите @Req() и получаете доступ к ответу через req.res, используется стандартное поведение контроллера гнезда.Если вы непосредственно используете @Res, вместо этого гнездо не будет связываться с объектом ответа, и вы будете иметь полный контроль над ним.

@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
}
...