Saya ingin menambahkan awalan perutean di tingkat modul dan/atau memiliki logika awalan perutean global yang kompleks secara umum.

Saya tahu saya dapat menggunakan fungsi tidak berdokumen NestApplication.setGlobalPrefix untuk menetapkan satu awalan global:

// main.ts
app.setGlobalPrefix(version);

Namun, saya ingin mengatur awalan di level modul dalam kasus ini.

Tampaknya saya dapat mencapai ini dengan mengatur awalan yang saya inginkan ke dalam dekorator di tingkat pengontrol:

//controler.ts
@Get('/PREFIX/health')
async getHealth() {

  // TODO: implement
  return {};
}

Tapi ini tampaknya cukup hacky dan rawan kesalahan. Tentunya ada cara yang lebih baik?

4
Jeffrey Mixon 16 November 2020, 22:52

1 menjawab

Jawaban Terbaik

Cara paling andal untuk melakukannya di NestJS adalah dengan menggunakan paket nest-router untuk membuat pohon perutean.

yarn add nest-router
# or npm i nest-router

Buat file di sebelah main.ts bernama routes.ts seperti:

import { Routes } from 'nest-router';
import { YourModule } from './your/your.module';

export const routes: Routes = [
  {
    path: '/v1',
    module: YourModule,
  },
];

Kemudian, di dalam file app.module.ts Anda, tambahkan router sebelum modul lain dimuat:

@Module({
  imports: [
    RouterModule.forRoutes(routes),
    YourModule,
    DebugModule
  ],

})

Sekarang ketika Anda menavigasi ke pengontrol YourModule, semua rutenya akan diawali dengan mis. v1 dalam hal ini:

curl http://localhost:3000/v1/your/operation

Menggunakan pendekatan ini memberi Anda fleksibilitas paling besar karena setiap modul tidak perlu tahu bagaimana itu akan diawali; aplikasi dapat memutuskan pada tingkat yang lebih tinggi. Awalan yang hampir lebih maju dapat dihitung dinamis versus mengandalkan string statis.

3
Matthias 16 November 2020, 19:59