NestJs: каталог с несколькими представлениями - PullRequest
0 голосов
/ 08 января 2019

Я занимаюсь разработкой приложения MVC с использованием фреймворка nestJs и использовал шаблонизатор hbs.

В соответствии с документацией я должен использовать эту конфигурацию, чтобы nestjs мог обслуживать представления:

async function bootstrap() {
  const app = await NestFactory.create(ApplicationModule);

  app.useStaticAssets(join(__dirname, '..', 'public'));
  app.setBaseViewsDir(join(__dirname, '..', 'views'));
  app.setViewEngine('hbs');

  await app.listen(3000);
}

Эта конфигурация предполагает, что все представления расположены в одном каталоге (представления), но что если каждый модуль имеет свои собственные представления?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Я предполагаю, что у вас есть структура приложения, подобная этой:

src
  main.ts
  /users
       users.controller.ts
       /views
         my-view.hbs
  /books
       books.controller.ts
       /views
         my-view.hbs

Затем вы можете установить базовый каталог просмотра на src:

app.setBaseViewsDir(__dirname);

И ссылка на представление с его относительным путем в ваших контроллерах:

@Controller('users')
export class UsersController {

  @Render('users/views/my-view')
           ^^^^^^^^^^^^^^^^^^^
  @Get()
  async getMyView() {
0 голосов
/ 09 января 2019

С версии 5.7.0

Вы можете установить массив каталогов:

app.setBaseViewsDir([
  join(__dirname, '..', 'users/views'), 
  join(__dirname, '..', 'books/views'),
]);

До версии 5.7.0

В экспрессе вы можете установить массив каталогов базовых путей :

Каталог или массив каталогов для представлений приложения. Если массив, представления ищутся в порядке их появления в массиве.

Однако типизация в nest.js не допускает массив, см. issue . Я создал запрос на получение , который изменит это.

Пока запрос на объединение не объединен, вы можете сделать:

app.setBaseViewsDir([
    join(__dirname, '..', 'users/views'), 
    join(__dirname, '..', 'books/views'),
  ] as any);

Как только запрос на объединение объединен, вы можете удалить as any.

...