nestjs - 如何在 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';
}
}
我试着按原样做,它一直给我“未定义”,即使如果我将它记录到构造函数中的控制台,它也会显示出来。我希望能够使用配置来设置这些常量。
最后,我想要的路线是:localhost/animal/cat/snowflake/meow
.
编辑:我尝试使用普通变量,它可以工作。显然问题在于我对 NestJS 的配置包的实现。
解决方案
您的配置服务没有问题,而是装饰器在 Typescript/JavaScript 中的工作方式存在问题。由于装饰器上下文的工作方式,装饰器无法访问类成员。如果您想让端点可配置,这似乎是一个坏主意,您可以使用您提到的nest-router 。
推荐阅读
- reactjs - 尽管代码相同/在其余部分工作,但 React 站点中一页的 P 标记未显示
- authentication - 无法创建 OneLogin 开发者帐户
- javascript - 为什么 webpack 将“-es5”和“es2015”附加到我的 Typescript 文件中?
- c++ - 使用 AVL 树解决 Pancake Stack 问题(不是 pancake 排序)
- java - 当我将正在开发的应用程序下载到智能手机时,我看不到一些文字
- gis - 基于行驶时间的等时线 - QGIS
- python - 如何在没有引导加载程序的情况下检查固件是否已上传到 Arduino Leonardo?
- vue.js - 创建 VuePress 主题时如何导入字体真棒?
- javascript - React-native Webview , javacript windows.open , WebView 中的新窗口
- java - 我无法理解