Как получить конфиг в контроллере маршрута Nest JS? - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь заставить переменную появляться через контроллер 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';
    }
}

Я пытался сделать это как есть, и он продолжает давать мне «неопределенный», даже если он обнаружится, если я войду в консоль в конструкторе. Я хочу иметь возможность использовать конфигурацию для установки этих констант.

В конце концов, мне нужен маршрут: localhost/animal/cat/snowflake/meow.


Редактировать: я попытался сделать это с нормальная переменная, и это работает. Очевидно, проблема в моей реализации конфигурационного пакета Nest JS.

1 Ответ

1 голос
/ 20 января 2020

Нет проблем с вашей службой конфигурации, а скорее с тем, как работают декораторы в Typescript / JavaScript. Декораторы не могут получить доступ к членам класса из-за того, как работает контекст декоратора. Если вы хотите сделать конечную точку настраиваемой, что кажется плохой идеей, вы можете использовать nest-router , как вы упомянули.

...