Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

579
Vistas
Error de Nestjs: no se pueden establecer encabezados después de que se envían al cliente

Tengo un middleware global y una guardia global, cuando la solicitud entra en la guardia, aparentemente envía una respuesta (la solicitud no llega a los controladores), lo cual es extraño porque el cliente obtiene 404 y nestjs arroja un error "No se puede configurar encabezados después de que se envían al cliente". Si desactivo el middleware todo funciona bien. ¿Cómo puedo arreglar esto?

Programa intermedio:

 @Injectable() export class AuthMiddleware implements NestMiddleware { @Inject() private readonly usersService: UsersService; @Inject() private readonly tokenService: TokenService; async use(req: Request, res: Response, next: NextFunction): Promise<void> { if (!req.cookies.token) { req.user = { userId: null, personId: null, role: null, }; next(); } try { const result = this.tokenService.verifyToken(req.cookies.token); const user = await this.usersService.findOne(result.userId); if (!user) { req.user = { userId: null, personId: null, role: null, }; next(); } req.user = { userId: result.userId, personId: result.personId, role: result.role, }; } catch { req.user = { userId: null, personId: null, role: null, }; } next(); } }

Guardia:

 @Injectable() export class RoleGuard implements CanActivate { constructor(private reflector: Reflector) {} async canActivate(context: ExecutionContext): Promise<boolean> { const req: Request = await context.switchToHttp().getRequest(); const requiredRole = this.reflector.get<Roles | null>( 'requiredRole', context.getHandler(), ); if (!requiredRole) { return true; // everything breaks here } if ( requiredRole !== req.body.user.role && req.body.user.role !== Roles.ADMIN ) { return false; } return true; } }

principales.ts:

 async function bootstrap() { const app = await NestFactory.create(AppModule); app.use(cookieParser()); app.use(urlencoded({ extended: true })); app.useGlobalPipes( new ValidationPipe({ transform: true, }), ); app.useGlobalGuards(new RoleGuard(new Reflector())); await app.listen(3000); } bootstrap();

aplicación.módulo.ts:

 @Module({ imports: [ ConfigModule.forRoot({ envFilePath: '.env', }), TypeOrmModule.forRoot(getOrmConfig()), UserModule, EventModule, ], controllers: [], providers: [RoleGuard], }) export class AppModule implements NestModule { configure(consumer: MiddlewareConsumer) { consumer.apply(AuthMiddleware).forRoutes({ path: '*', method: RequestMethod.ALL, }); } }
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

De alguna manera logré solucionarlo eliminando esto de AuthGuard:

 if (!req.cookies.token) { req.user = { userId: null, personId: null, role: null, }; next(); }

Tal vez alguien sabe por qué funcionó?

about 4 years ago · Juan Pablo Isaza Denunciar

0

Supongo que sucede debido a la implementación inapropiada de la llamada a la función next() .

El error que está recibiendo se debe a que después de llamar a next() , tiene un código adicional para ejecutar que llamará a next() lo que hará que su controlador envíe una respuesta al cliente, pero ya fue enviado por su primera llamada.

Para corregir la realización actual, simplemente cambie next() -> para return next() aquí más información al respecto

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda