• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

NestJS - serwowanie plików statycznych (zdjęcia)

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
44 wizyt
pytanie zadane 21 grudnia 2022 w JavaScript przez rszczepanski02 Obywatel (1,180 p.)

Cześć!
Ostatnio napotkałem dość upierdliwy problem z moją aplikacją (API) stworzoną w nestJS. Mianowicie aplikacja serwuje pliki statyczne (na ten moment tylko zdjęcia), które umieszczane są w głównym katalogu aplikacji w folderze uploads/images. Wszystko super działało do pewnego momentu kiedy zapytania kierowane pod adres z lokalizacją moich plików statycznych zaczęły zwracać błąd 404. Dodam, że przeglądałem wszystkie commity od momentu +/- kiedy przestało to działać i w głównych plikach aplikacji jak app.module.ts, main.ts nie dokonywałem żadnych zmian.

main.ts

async function bootstrap() {
  const app: NestExpressApplication = await NestFactory.create(AppModule);
  const config: ConfigService = app.get(ConfigService);
  const port: number = config.get<number>('PORT');

  const appConfiguration = new DocumentBuilder()
    .setTitle('Evelto API')
    .setDescription('Evelto-Project API Documentation')
    .setVersion('1.0')
    .addTag('evelto')
    .build();

  const swaggerOptions: SwaggerDocumentOptions = {
    operationIdFactory: (controllerKey: string, methodKey: string) => methodKey,
  };
  const document = SwaggerModule.createDocument(
    app,
    appConfiguration,
    swaggerOptions,
  );
  SwaggerModule.setup('api', app, document);

  app.setGlobalPrefix('v1');
  app.useGlobalPipes(new ValidationPipe({ whitelist: true, transform: true }));
  app.enableCors();


  app.useStaticAssets(join(__dirname, '..', 'uploads'), {
    index: false,
    prefix: '/uploads',
  });

  await app.listen(port, () => {
    console.log('[WEB]', config.get<string>('BASE_URL'));
  });
}

bootstrap();

Zapytanie kierowane na adres http://localhost:3000/uploads/images/test.jpg zwraca 404 "Cannot GET /uploads/images/test.jpg"

Jeśli zna ktoś prawdopodobną przyczynę tego błędu to będę bardzo wdzięczny za pomoc. Sam już siedzę nad tym od 3 dni :/

Pozdrawiam!

2 odpowiedzi

0 głosów
odpowiedź 21 grudnia 2022 przez rszczepanski02 Obywatel (1,180 p.)

Rozwiązałem to tworząc reużywalny kontroller:

  @Get('/images/:fileName')

  async serveImages(@Param('fileName') fileName: any, fileId, @Res() res: Response): Promise<any> {

    res.sendFile(join(__dirname, '..', '..', '/uploads/', fileName));

  }


Mógłby mi ktoś wytłumaczyć dlaczego wcześniej działało bez i nagle przestało? :D

 

0 głosów
odpowiedź 21 grudnia 2022 przez Ehlert Ekspert (210,790 p.)
Odradzam serwowanie plików statycznych nodem. Są do tego o wiele lepsze rozwiązania takie jak S3, czy chociażby nginx.

Podobne pytania

+1 głos
1 odpowiedź 115 wizyt
pytanie zadane 24 sierpnia 2021 w HTML i CSS przez ShockWave Bywalec (2,350 p.)
+1 głos
0 odpowiedzi 167 wizyt
pytanie zadane 3 sierpnia 2018 w JavaScript przez szustka124 Gaduła (4,420 p.)
0 głosów
3 odpowiedzi 248 wizyt
pytanie zadane 9 lutego 2020 w HTML i CSS przez Artek Stary wyjadacz (11,840 p.)

90,900 zapytań

139,572 odpowiedzi

313,905 komentarzy

60,373 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...