簡體   English   中英

NestJS:如何在生產構建中隱藏端點?

[英]NestJS: How to hide an endpoint in production build?

我想添加一個可以簡化開發/測試的端點。 同時,生產中不需要這個端點。 來自 Java 世界,一直有開箱即用的解決方案(例如,使用配置文件),但我沒有在 NestJS 文檔中找到類似的東西。

問題:有沒有辦法在 NestJS 中實現一個端點,如果該應用程序是為生產用途構建的,則該端點將不可用?

一些選項取決於您的用例:

  1. 您有基於身份驗證或角色的訪問控制方案嗎? 授權? NestJS 有一些 Auth 中間件可能有助於解決這個問題,但如果這是一次性的,可能太重量級了: tutorial

  2. 一種快速而寬松的方法是根據環境變量返回 404。 在您的開發服務器中以不同於生產環境的方式設置環境變量。

if(process.env.ENV_VAR === 'production') {
  throw new HttpException('Not Found', HttpStatus.NOT_FOUND)
}

  1. 如果您在 Prod 或 Out 中始終需要大量內部路由,那么執行此操作的一個好方法可能是通過在您的項目中添加第二個服務器並以不同方式代理它來設置私有和公共路由。

這是一個老問題,但我遇到了類似的問題並像這樣解決了它:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM