【问题标题】:Disable Swagger on Node/Express API在 Node/Express API 上禁用 Swagger
【发布时间】:2018-07-04 14:12:59
【问题描述】:

我正在使用 Swagger 在我的开发环境中记录我的 Node/Express API。它运行良好,但现在我需要在投入生产时禁用它,以免 API 定义可公开访问。

有没有办法做到这一点,例如使用一些 npm 脚本?

谢谢

【问题讨论】:

  • 可以使用环境变量来检查。例如: if (proccess.env.NODE_ENV !== 'production') { // allow route } 并且该环境变量可以保存在 .env 文件中并以 npmjs.com/package/dotenv 加载,例如
  • 谢谢,它看起来很棒 :) 所以,如果我错了,请告诉我,但假设我有一个名为“isProduction”的变量,我是否必须在继续之前手动将其设置为“true”生产,或者有什么方法可以自动化吗?
  • 理想情况下,您应该拥有一个包含所有环境相关变量的 .env 文件。在生产中,该文件将具有与开发中相同的键但不同的值。例如,您的 API 密钥也应该这样配置。
  • 好的。所以使用 dotenv,我可以告诉 lib 我是在 prod 还是 dev 上? (抱歉,还没来得及准确阅读文档)

标签: node.js express swagger


【解决方案1】:

按照惯例,您想设置 NODE_ENV 环境变量(环境变量是在操作系统上设置的值,不依赖于您的应用程序)以使事情取决于您当前所在的环境。这在很大程度上取决于您在哪里托管您的生产应用程序。

  • 如果是 AWS ECS 部署,您需要在 AWS Systems Manager Parameter Store 中进行设置。
  • 或者,如果它只是您通过 ssh 进入的一个普通云实例,您可能会使用类似于 node app.jsnpm run start 的方式运行您的应用程序(或者您可能正在使用 docker,并且您的脚本以其中之一结尾命令。)在任何情况下,在执行“运行应用程序”命令之前,请确保通过export NODE_ENV=production 命令将环境设置为生产环境。您可以通过echo $NODE_ENV 命令检查它是否有效。
  • 或者,如果您使用的是 docker-compose,您可以这样设置环境变量:

无论如何,一旦您确定 NODE_ENV 在应用程序在生产环境中运行时是生产环境,并且有以下假设:

  • 您的应用程序在启动文件中被命名为“app”,并且您将中间件定义为“app.use(...”
  • 你的招摇路线类似于“http://localhost:PORT/docs

有了这些假设,让它成为你代码中第一个“app.use”类型的中间件定义:

if(process.env.NODE_ENV === "production"){
  app.use('/docs', (req, res, next) => {
    res.status(404).send("Not Found");
  });
}

如果我所做的任何假设与您的情况无关,请相应地进行调整。你就完成了。

【讨论】:

  • 谢谢!非常清楚:) 但是,在您的“if”语句中,您的意思是“==”production”而不是“!==”?
  • 是的,我想后不久就编辑了。但是,使用三个等号而不是两个等号更好:developer.mozilla.org/en-US/docs/Web/JavaScript/… 因为它不进行类型转换,所以速度也更快。
【解决方案2】:

如果将swagger-express-mwswagger-tools 用于swagger-UI

这就是我在 app.js 中做同样事情的方式

if (process.env.NODE_ENV === 'development') {
  SwaggerExpress.create(config, function (err, swaggerExpress) {
    if (err) { throw err; }

    app.use(SwaggerUi(swaggerExpress.runner.swagger));
    // install middleware
    swaggerExpress.register(app);

    app.listen(PORT);
  });
} else {
  app.listen(PORT, () => console.log(`Server started @ Port - ${PORT}`));
}

【讨论】:

    猜你喜欢
    • 2017-12-02
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多