[英]NestJS: How to hide an endpoint in production build?
我想添加一個可以簡化開發/測試的端點。 同時,生產中不需要這個端點。 來自 Java 世界,一直有開箱即用的解決方案(例如,使用配置文件),但我沒有在 NestJS 文檔中找到類似的東西。
問題:有沒有辦法在 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 {}
這樣我就可以根據環境配置將條件控制器包含在應用程序中或從應用程序中排除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.