[英]Disable Swagger on Node/Express API
我正在使用 Swagger 在我的開發環境中記錄我的節點/Express API。 它運行良好,但現在我需要在生產時禁用它,以免公開訪問 API 定義。
有沒有辦法做到這一點,例如使用一些 npm 腳本?
謝謝
按照慣例,您想設置 NODE_ENV 環境變量(環境變量是在操作系統上設置的值,不依賴於您的應用程序)以使事情取決於您當前所在的環境。 這在很大程度上取決於您在何處托管生產應用程序。
node app.js
或npm run start
運行您的應用程序(或者您可能正在使用 docker 並且您的腳本以這些命令之一結束。 ) 無論如何,在執行“運行應用程序”命令之前,請確保通過export NODE_ENV=production
命令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");
});
}
如果我所做的任何假設與您的情況不相關,請相應地調整它們。 你已經完成了。
如果對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}`));
}
除了禁用 Swagger UI 之外,您還可以選擇對其進行訪問保護。 以下是我們如何使用 HTTP Basic Auth 完成這兩項操作。 在您的main.ts
或等效文件中,這里有一個使用 NEST 的 Node.js 應用程序:
const customNestApplication = (app: INestApplication) => {
// [...]
const swaggerEnabled = configService.get('swagger.enabled', { infer: true });
if (
swaggerEnabled &&
configService.get('swagger.auth.user', { infer: true }) &&
configService.get('swagger.auth.password', { infer: true })
) {
app.use(
`${configService.get('swagger.path', { infer: true })}`,
basicAuth({
challenge: true,
users: {
[configService.get('swagger.auth.user', { infer: true })]:
configService.get('swagger.auth.password', { infer: true }),
},
}),
);
}
// Set up Swagger as usual, etc.
// [...]
return app.listen(port);
};
有關更多詳細信息,另請參閱另一個專門關於 Swagger 身份驗證的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.