solicitar /login/login.html
redirigir / iniciar sesión
Cambio la redirección en el interceptor
export class UricheckInterceptor implements NestInterceptor { constructor(private uri: string[]) {} intercept(context: ExecutionContext, next: CallHandler): Observable<any> { const response = context.switchToHttp().getResponse(); const request = context.switchToHttp().getRequest(); const { pathname } = parseurl(request); const pathLength = pathname.length; const pathSlash = pathname.lastIndexOf('/'); const pathLast = pathname.substring(pathSlash + 1, pathLength); const queryString = request.query; if (pathLast === this.uri[1]) { if (Object.keys(queryString).length > 0) { if (queryString.code !== undefined && queryString.bst !== undefined) { response.redirect(301, `./${this.uri[0]}?code=${queryString.code}&bst=${queryString.bst}`); next.handle(); } } else { return next.handle(); } } }La redirección continúa y se produce un error.
This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client....No puedo resolverlo en absoluto.
Espero sinceramente su ayuda.
¿Qué hice mal?
Es probable que su encabezado se envíe con la respuesta, pero no verá ese encabezado cuando el navegador realmente siga la redirección y luego solicite la nueva URL. Los navegadores no hacen eso. Recuerde, cuando hace res.redirect(), envía una respuesta con un estado 301/302 y un encabezado de ubicación. El navegador ve ese 301/302 y lee el encabezado de la ubicación y luego realiza una nueva solicitud del navegador a su servidor para la ubicación redirigida. Los encabezados de la respuesta anterior o siguiente NO se agregan a la nueva solicitud de la ubicación redirigida.
Las formas habituales de pasar datos como este a solicitudes redirigidas son: