Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

572
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!