NestJs:多视图目录

时间:2019-01-08 19:49:17

标签: node.js typescript express nestjs

我正在使用nestJs框架开发MVC应用,并且使用了hbs模板引擎。

根据documentation,我必须使用此配置使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 :(得分:1)

自v5.7.0起

您可以设置目录数组:

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

v5.7.0之前

您可以set an array of base path directories

  

应用程序视图的目录或目录数组。如果是数组,则按照在数组中出现的顺序查找视图。

但是,nest.js中的类型不允许使用数组,请参见issue。我创建了一个pull request,它将对此进行更改。

在合并拉取请求之前,您可以执行以下操作:

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

合并合并请求后,您可以删除as any

答案 1 :(得分:0)

我假设您的应用程序结构与此类似:

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() {