web-dev-qa-db-fra.com

NestJS active cors en production

J'ai activé CORS dans mon application NestJS en suivant le tutoriel officiel , donc mon main.ts ressemble à ce qui suit:

import { FastifyAdapter, NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule, new FastifyAdapter(), { cors: true });
  await app.listen(3000);
}
bootstrap();

et ça marche quand je lance l'application en utilisant npm run start:dev.

Cependant, lorsque j'essaie de compiler d'abord l'application à l'aide de npm run webpack, puis de l'exécuter à l'aide de node server.js, le cors ne fonctionnera pas.

La requête http du client échouera avec:

La réponse à la demande de contrôle en amont ne réussit pas la vérification du contrôle d'accès: aucun en-tête 'Access-Control-Allow-Origin' n'est présent sur la ressource demandée. Origin ' http: // localhost: 8000 ' n'est donc pas autorisé à accéder. La réponse avait le code d'état HTTP 404.

3
Francesco Borzi

D'une manière ou d'une autre, le problème était en train de le compiler en utilisant npm run webpack. Si je le compile en utilisant prestart:prod, cela fonctionnera.

Merci @ georgii-rychko de l'avoir suggéré via des commentaires.

0
Francesco Borzi

Essayez d’utiliser l’approche décrite ici https://docs.nestjs.com/techniques/cors

const app = await NestFactory.create(ApplicationModule);
app.enableCors();
await app.listen(3000);
5
Georgii Rychko

Triste de savoir que vous avez également essayé: 

const app = await NestFactory.create(ApplicationModule);
app.enableCors();
await app.listen(3000);

Et ça ne marche toujours pas.


Assurez-vous que cors est activé sur votre serveur, ce qui devrait ressembler à ceci:

app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
  res.header('Access-Control-Allow-Headers', 'Content-Type, Accept');
  next();
});

Et assurez-vous également que votre navigateur est cors pris en charge. Si tout cela ne fonctionne toujours pas, je vous conseillerai de télécharger Allow-Control-Allow-Origin extension pour Chrome, cela devrait résoudre votre problème. 

0
antzshrek