You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在HapiJS生产服务器中禁用Swagger API文档

嘿,这个场景我太熟悉了——很多团队开发时依赖Swagger UI调试,上线又怕暴露文档,给你几个稳妥的方案,都不会影响API的正常运行:

方案1:通过环境变量动态开关Swagger UI

这是生产环境最常用的方式,能让你在开发时正常用UI,部署生产时一键关闭,完全不影响API逻辑。

  • 第一步,先读取环境变量判断当前环境:

    const isProduction = process.env.NODE_ENV === 'production';
    
  • 然后在注册Swagger插件时,根据这个变量控制UI的启用状态:

    await server.register({
      plugin: require('hapi-swagger'),
      options: {
        // 核心:生产环境禁用Swagger UI界面
        swaggerUI: !isProduction,
        // 可选:如果连JSON格式的文档也不想暴露,把路由前缀设为false
        routePrefix: isProduction ? false : '/docs',
        // 你的其他Swagger配置(比如API信息、标签等)
        info: {
          title: '我的API文档',
          version: '1.0.0'
        }
      }
    });
    

    划重点:swaggerUI: false只会关闭可视化的UI界面,Swagger插件不会干预你的API路由,所以接口功能完全不受影响。

方案2:用路由权限做细粒度控制

如果需要更灵活的限制(比如只允许内部IP访问文档),可以先正常注册插件,再给Swagger路由加拦截:

// 先正常注册Swagger插件
await server.register({
  plugin: require('hapi-swagger'),
  options: {
    routePrefix: '/docs',
    swaggerUI: true,
    // 其他配置...
  }
});

// 生产环境下给Swagger路由加访问限制
if (process.env.NODE_ENV === 'production') {
  // 找到所有Swagger相关的路由
  const swaggerRoutes = server.table().filter(route => route.path.startsWith('/docs'));
  
  swaggerRoutes.forEach(route => {
    // 方式1:直接拒绝所有外部访问
    route.route.config.auth = 'deny';

    // 方式2:IP白名单(适合内部人员偶尔需要查看文档的场景)
    // route.route.config.handler = (request, h) => {
    //   const allowedIPs = ['192.168.1.100', '你的内部办公IP'];
    //   if (!allowedIPs.includes(request.info.remoteAddress)) {
    //     return h.response('Forbidden').code(403);
    //   }
    //   return h.continue;
    // };
  });
}
方案3:生产环境直接不注册Swagger插件

如果确定生产环境完全不需要Swagger的任何功能(包括JSON文档),可以直接跳过插件注册:

// 只有非生产环境才注册Swagger
if (process.env.NODE_ENV !== 'production') {
  await server.register({
    plugin: require('hapi-swagger'),
    options: {
      // 开发环境的Swagger配置...
    }
  });
}

这个方案最彻底,生产环境不会加载Swagger插件,完全没有额外性能开销,也绝对不会暴露文档。

最后提醒

不管用哪种方案,一定要确保生产环境的NODE_ENV环境变量设置为production,不然配置不会生效哦!

内容的提问来源于stack exchange,提问作者Jitendra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:02:08