我使用Swagger在我的开发环境中记录我的Node / Express API。它完美运行但现在我需要在开始生产时禁用它,以免让API定义公开到达。
有没有办法,例如使用一些npm脚本?
由于
答案 0 :(得分:1)
与常规保持一致,您希望设置NODE_ENV环境变量(环境变量是在操作系统上设置的值,而不依赖于您的应用),以使事情取决于您当前所处的环境。这在很大程度上取决于您在哪里托管您的生产应用程序。
node app.js
或npm run start
的内容(或者你可能正在使用docker而你的脚本结束了使用其中一个命令。)在任何情况下,在执行“运行应用程序”命令之前,请确保通过export NODE_ENV=production
命令将环境设置为生产。您可以通过echo $NODE_ENV
命令检查它是否有效。无论如何,一旦你确定应用程序在生产中运行时NODE_ENV正在生产,并且有以下假设:
通过这些假设,使其成为您的代码中第一个“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-mw
和swagger-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}`));
}