Как обслуживать статические HTML-файлы в Nest.js? - PullRequest
2 голосов
/ 24 марта 2019

Я хочу обслуживать статические файлы HTML, которые находятся в папке /dist вне проекта Nest.index.html загружен успешно, но не удается загрузить любой файл JS (404 ошибка).

У меня есть проект Node / Express.js, который использует

app.use('/', express.static('../client/dist'))

, и он работаетотлично.

В проекте Nest, однако,

app.setBaseViewsDir(join(__dirname, '../../client/dist'))

не работает.

В AppController я пробовал

import { Response } from 'express';

@Get()
  get(@Res() res: Response) {
    res.sendFile('index.html', {
      root: '../client/dist',
    });
  }

Но не повезло.

Как уже упоминалось, index.html успешно загружен.Так что проблема не в неправильном пути.Также проблема не в неправильных src-путях в index.html, потому что в проекте Express используются те же самые файлы.

/dist
  |-index.html
  |-main.js
  |-etc.

В index.html:

<script type="text/javascript" src="main.js"></script>

Itтакже не работает, когда я помещаю папку dist в проект Nest (и изменяю путь).

Я нашел решение:

Я сейчас использую экспресс-модуль:

import * as express from 'express';
...
app.use('/', express.static('../client/dist'));

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Запись app.useStaticAssets(join(__dirname, '../../client/dist')) в main.ts

А также вы можете попробовать это приложение:

import { resolve } from 'path';

app.useStaticAssets({
    root: resolve("./build")
  });
0 голосов
/ 24 марта 2019

Для обслуживания статических файлов вы должны использовать useStaticAssets() вместо setBaseViewsDir():

app.useStaticAssets(join(__dirname, '../../client/dist'))

Когда вы используете useStaticAssets, вам не нужно настраивать контроллер, все ваши файлы будут обслуживаться автоматически:

Допустим, под client/dist у вас есть файлы index.html и pic.jpg. Они будут обслуживаться как:

localhost:3000 -> index.html
localhost:3000/pic.jpg -> pic.jpg

Настройка базовых представлений dir необходима, если вы хотите использовать механизм представления, например, hbs, см. docs .

...