Nestjs.Ошибка типа: корневой путь должен быть строкой - PullRequest
0 голосов
/ 23 января 2019

Я настраиваю папку статических файлов в main.ts

  app.useStaticAssets({
    root: path.resolve(__dirname + '/public'),
  });

Теперь во время выполнения возникает ошибка TypeError: root path must be a string Я пытался использовать path.join(__dirname + '/public'), - не помогло.

Я импортирую путь, как import * as path from 'path'

Любые идеи, как исправить?

ОБНОВЛЕНИЕ : согласно ответам выше, я пытаюсь:

app.useStaticAssets(join(__dirname, '..', 'public')); - получаю ошибку {"statusCode":404,"error":"Not Found","message":"Cannot GET /"}

также пытался:

app.useStaticAssets({
    root: path.join(__dirname, '..', 'public'),
    prefix: '/public/',
  });

Все еще получаю ту же ошибку с этим - TypeError: root path must be a string

Мой метод контроллера выглядит так:

  @Get()
  root(@Res() res) {
    res.sendFile('index.html');
  }

ОБНОВЛЕНИЕ : Если у меня есть app.useStaticAssets(path.join(__dirname, '..', 'public')); и удаление root, метод контроллера все еще имеет ошибку 404.

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Обратите внимание, что конфигурация для экспресс и fast отличается:

Экспресс (по умолчанию)

app.useStaticAssets(join(__dirname, '..', 'public'));

Fastify

app.useStaticAssets({      
    root: join(__dirname, '..', public'),
    prefix: '/public/',
});

join напрямую импортируется в примерах.

import { join } from 'path';

Если вы используете статический контент, вам не нужно добавлять определенный контроллер; активы будут автоматически доступны через промежуточное ПО.

Предположим, у вас есть два файла в /public: index.html и image.png

  • localhost:3000 и localhost:3000/index.html подача index.html
  • localhost:3000/image.png обслуживает image.png

См. Этот простой пример кода и коробки без контроллера.

0 голосов
/ 23 января 2019

Вам необходимо предоставить свойство prefix.

Fix

  app.useStaticAssets({
    root: path.join(__dirname, '..', 'public'),
    prefix: '/public/',
  });

Подробнее

...