Как получить конфигурацию в маршруте контроллера NestJS?
Я пытаюсь заставить переменную отображаться как через контроллер prefix
и метод path
параметры декораторов. Я знаю о Nest Router, но я бы предпочел не использовать его, пока могу.
/*************************
* eneity.config.ts
*************************/
import { registerAs } from '@nestjs/config';
export default registerAs('cat', () => ({
cat: {
urlPrefix: 'cat',
paramName: 'meow',
}
})
);
/*************************
* cat.module.ts
*************************/
import entityConfig from 'config/entity.config';
import { CatController } from 'entities/cat/cat.controller';
import { ConfigModule, ConfigService } from '@nestjs/config';
@Module({
imports : [ConfigModule.forFeature(entityConfig),],
providers : [ConfigService],
controllers: [CatController],
})
export class CatModule {}
/*************************
* cat.controller.ts
*************************/
import { Controller, Request, Get } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
@Controller(`${this.urlPrefix}/cat`) // <<<<< Here
export class CatController {
private readonly urlPrefix;
private readonly paramName;
constructor(
private readonly configService: ConfigService,
) {
this.urlPrefix = this.configService.get<string>('cat.urlPrefix'); // animal
this.paramName = this.configService.get<string>('cat.paramName'); // meow
}
@Get(`snowflake/:${this.paramName}`) // <<<<< Here
getProfile(@Request() req) {
return 'meowww';
}
}
Я попытался сделать это как есть, и он продолжает давать мне "undefined", хотя он появляется, если я записываю его в консоль в конструкторе. Я хочу иметь возможность использовать конфигурацию для установки этих констант.
В конце концов, мне нужен следующий маршрут: localhost/animal/cat/snowflake/meow
.
Изменить: я попытался использовать обычную переменную, и она работает. По-видимому, проблема связана с моей реализацией пакета конфигурации NestJS.
1 ответ
Это не проблема с вашей службой конфигурации, а проблема с тем, как декораторы работают в Typescript/JavaScript. Декораторы не могут получить доступ к членам класса из-за того, как работает контекст декоратора. Если вы хотите сделать конечную точку настраиваемой, что в первую очередь кажется плохой идеей, вы можете использовать nest-router, как вы упомянули.