Я видел много сообщений об этой ошибке, но не смог выяснить, как это исправить, так как я не могу понять ошибку, поэтому мне пришлось создать новый вопрос.
У меня есть контроллер, который обслуживает мою страницу HTML, которая находится ниже:
@Get()
@UseGuards(MyGuard)
root(@Res() res): void {
return res.sendFile(
path.resolve(
'../dist/index.html'
)
);
}
Этот маршрут защищен охранником, который, в свою очередь, приводит меня к URL-адресу перенаправления, который выдает мне токен, и мне потребуется установить этот токен как повар ie в моем ответе. Идея состоит в том, чтобы заблокировать неавторизованного пользователя от просмотра приложения через эту защиту и перенаправить пользователя на страницу ошибки
Логотип Guard c выглядит следующим образом:
@Injectable()
export class MyGuard implements CanActivate {
constructor() {}
canActivate(context: ExecutionContext): boolean {
const req = context.switchToHttp().getRequest();
const res = context.switchToHttp().getResponse();
const cookie = this.getookie(req);
if (cookie found in cookie and is valid) {
return true;
}
else if (token available in redirect url) {
res.cookie('token', req.query['token']);
return true;
}
else if (token not available in route path) {
const myRedirectionUrl = createRedirectionUrl(req);
**// Error in below snippet
res.writeHead(302, {
Location: myRedirectionUrl // <-- does some validation and redirects to url with token query string
});
res.end()**
}
else {
return false
}
}
}
Хотя я получаю токен запроса, я могу установить cook ie, и поток работает, как и ожидалось, я всегда получаю исключение по res .writeHead (), который вызывается при первом запросе (который не содержит параметр cook ie или параметр запроса).
(узел: 26764) UnhandledPromiseRejectionWarning: Ошибка [ERR_HTTP_HEADERS_SENT]: невозможно установить заголовки после того, как они отправлены клиенту
на ServerResponse.setHeader (_http_outgoing. js: 470: 11)
на ServerResponse.header (C: \ project \ node_modules \ express \ lib \ response . js: 771: 10)
в ServerResponse.send C: \ project \ node_modules \ express \ lib \ response. js: 170: 12)
в ServerResponse. json (C: \ project \ node_modules \ express \ lib \ response. js: 267: 15)
в ExpressAdapter.reply (C: \ project \ node_modules@nestjs \ platform-express \ adapters \ express адаптер. js: 23: 57)
в ExceptionsHandler.catch (C: \ project \ node_modules@nestjs \ core \ exceptions \ base-exception-filters er. js: 41: 24)
at ExceptionsHandler.next (C: \ project \ node_modules@nestjs \ core \ exceptions \ exceptions-handler. js: 15: 20)
at C: \ project \ node_modules@nestjs \ core \ router \ router-proxy. js: 12: 35
at process._tickCallback (внутренний / process / next_tick. js: 68: 7)
(узел: 26764) UnhandledPromiseRejectionWarning: необработанное отклонение обещания
Любые входные данные должны быть очень полезны !!