【发布时间】:2023-01-11 18:22:08
【问题描述】:
我想添加一个可以简化开发/测试的端点。同时,生产中不需要这个端点。来自 Java 世界,总是有一个开箱即用的解决方案(例如,使用配置文件),但我没有在 NestJS 文档中找到类似的东西。
问题:有没有办法在 NestJS 中实现一个端点,如果该应用程序是为生产用途构建的,那么该端点将不可用?
【问题讨论】:
标签: javascript node.js typescript nestjs
我想添加一个可以简化开发/测试的端点。同时,生产中不需要这个端点。来自 Java 世界,总是有一个开箱即用的解决方案(例如,使用配置文件),但我没有在 NestJS 文档中找到类似的东西。
问题:有没有办法在 NestJS 中实现一个端点,如果该应用程序是为生产用途构建的,那么该端点将不可用?
【问题讨论】:
标签: javascript node.js typescript nestjs
一些选项取决于您的用例:
您有基于身份验证或角色的访问控制方案吗?授权? NestJS 有一些 Auth 中间件可能有助于解决这个问题,但如果这是一次性的,可能过于重量级:tutorial
一种快速而宽松的方法是根据环境变量返回 404。在您的开发服务器中以不同于生产环境的方式设置环境变量。
if(process.env.ENV_VAR === 'production') {
throw new HttpException('Not Found', HttpStatus.NOT_FOUND)
}
【讨论】:
这是一个老问题,但我遇到了类似的问题并像这样解决了它:
function getControllers(): Array<Type<unknown>> {
// add all the non-conditional controllers here
const controllers: Array<Type<unknown>> = []
if(process.env["NODE_ENV"] !== "production")
controllers.push(DevController)
// possible other conditional controllers
return controllers
}
现在,当我创建 AppModule 时,我会这样做:
@Module({
imports: [/* imports */],
controllers: getControllers(),
providers: [/* providers */]
})
export class AppModule {}
这样我就可以根据环境配置将条件控制器包含在应用程序中或从应用程序中排除。
【讨论】: