Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

574
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda