如何在Nestjs路由器中按控制器拆分路由

时间:2019-08-04 11:53:29

标签: javascript node.js typescript express nestjs

我正在使用库nest-router,我想通过附加到控制器的许多文件或仅存储在控制器附近的文件来划分路由器结构。 在Angular中,我可以在路由器定义中使用loadChildren并进行延迟加载模块。 我如何创建类似Angular样式的路由器结构?还是仅按子路由来分隔路由器文件?

const routes: Routes = [
    {
      path: '/ninja',
      module: NinjaModule,
      childrens: NinjaRouterModule // <- like here
    },
  ];

在NinjaRouterModule

const routes: Routes = [
        {
          path: '/cats',
          module: CatsModule,
        },
        {
          path: '/dogs',
          module: DogsModule,
          childrens: DogsRouterModule // <-like here
        }
  ];

2 个答案:

答案 0 :(得分:0)

NestJS 8x

import { Module } from '@nestjs/common'
import { RouterModule } from '@nestjs/core'

@Module({
  imports: [RouterModule.register([{
    path: 'admin',
    module: AdminModule,
    children: [
      {
        path: 'dashboard',
        module: DashboardpModule
      },
      {
        path: 'metrics',
        module: MetricsModule
      }
    ]
  }])]
})

export default class AppModule {
}

https://docs.nestjs.com/recipes/router-module#router-module

答案 1 :(得分:0)

我不认为你想延迟加载路由服务器端,因为加载逻辑不一样,你会用 angular 做客户端。

  • 在客户端,您希望尽可能快地显示主页并在用户访问 web 应用程序时加载其他页面(延迟加载)

  • 在服务器中,您希望在启动时加载所有内容,以便能够在服务器初始化后尽可能快地响应而无需加载外部资源(尽可能多)。

所以,我认为正是由于这个原因,在 NestJS 中,可以在根模块中仅加载一次路由,但没有什么可以阻止您使用经典导出/导入将路由外部化到另一个文件中。

就我个人而言,我的应用程序使用这种结构:

ninja/
   cat/
       cat.module.ts
    dog/
       dog.module.ts
    ninja.module.ts
    ninja.routes.ts
    index.ts
app.module.ts
app.routes.ts

在 app.routes.ts 中

imports {ninjaRoutes, NinjaModule} from './ninja';

export const appRoutes: Routes = [
  {
    path: 'ninja',
    module: NinjaModule,
    childrens: ninjaRoutes
  },
];

在 ninja.routes.ts

import { CatModule } from './cat/cat.module';
import { DogModule } from './dog/dog.module';

export const ninjaRoutes = [
  {
    path: 'cats',
    module: CatModule
  }, {
    path: 'dogs',
    module: DogModule
  }
];

在忍者/index.ts

export * from './ninja.module';
export * from './ninja.routes';

在 app.module.ts 中

import { Module } from '@nestjs/common';
import { RouterModule } from '@nestjs/core';
import { appRoutes } from './app.routes';
import { NinjaModule } from './ninja';

@Module({
  imports: [NinjaModule, RouterModule.register(appRoutes)]
  ...