【问题标题】:NestJs: multiple views directoryNestJs:多视图目录
【发布时间】:2019-06-03 13:22:30
【问题描述】:

我正在使用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);
}

此配置假定所有视图都位于一个目录(视图)中,但如果每个模块都有自己的视图呢?

【问题讨论】:

    标签: node.js typescript express nestjs


    【解决方案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

    【讨论】:

    • 谢谢!有用。但是通过这种方法,所有“src”文件夹都将公开为公共权利吗?这安全吗?
    • 我认为只有在您设置 useStaticAssets 时它才会暴露(您不必这样做)。只有通过@Render 显式公开视图时,才能访问视图。
    • @maroodb 不是您的解决方案?
    • 但它不会公开任何文件,除非您在 @Render 中明确引用它们。即使您的视图目录位于 src 目录旁边,您也可以使用相对路径访问 src 目录中的视图:../src/my-view,但同样只能使用 @Render。所以没有区别。
    • 抱歉,这是一次意外点击:p
    【解决方案2】:

    我假设你有一个类似这样的应用结构:

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

    【讨论】:

    • 我无法做到这一点,无法查找视图
    • @SaurabhYadav 这太笼统了,无法回答。请打开一个新问题并包含相关代码 sn-ps。另外,请参阅上面的其他答案,也许这对您有用。
    • 在 main.ts 我设置了 app.setBaseViewsDir(__dirname);所有的事情都和你在回答中提到的一样。我还为此 github.com/saurabhkhoshya/nestjs-mvc-handlebar 创建了一个 git repo
    • 如果你有这个github.com/nestjs/nest/issues/1513的任何样本,那就太好了
    猜你喜欢
    • 2020-08-08
    • 2020-10-06
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 2011-01-08
    • 2014-08-18
    相关资源
    最近更新 更多