在Node / Express API上禁用Swagger

时间:2018-01-25 10:46:53

标签: node.js express swagger

我使用Swagger在我的开发环境中记录我的Node / Express API。它完美运行但现在我需要在开始生产时禁用它,以免让API定义公开到达。

有没有办法,例如使用一些npm脚本?

由于

2 个答案:

答案 0 :(得分:1)

与常规保持一致,您希望设置NODE_ENV环境变量(环境变量是在操作系统上设置的值,而不依赖于您的应用),以使事情取决于您当前所处的环境。这在很大程度上取决于您在哪里托管您的生产应用程序。

  • 如果是AWS ECS部署,则需要在AWS Systems Manager参数存储中进行设置。
  • 或者,如果它只是一个你可以使用的香草云实例,你可能会运行你的应用程序,其中包含node app.jsnpm run start的内容(或者你可能正在使用docker而你的脚本结束了使用其中一个命令。)在任何情况下,在执行“运行应用程序”命令之前,请确保通过export NODE_ENV=production命令将环境设置为生产。您可以通过echo $NODE_ENV命令检查它是否有效。
  • 或者如果你使用的是docker-compose,你可以设置env vars: it says development here but you'll set it to production

无论如何,一旦你确定应用程序在生产中运行时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");
  });
}

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

答案 1 :(得分:0)

如果对 swagger-UI

使用swagger-express-mwswagger-tools

这就是我在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}`));
}