Node.js 将不同项目的 Swagger 文档合并为一个项目

Combining Swagger documentation of different projects into one project in Node.js

我正在进行两个项目,即管理员和身份验证。 管理员项目托管在本地端口 3002 上,身份验证项目托管在本地端口 3005 上。 我确实使用库 swagger-ui-expressyamljs 在管理员上设置了 swagger。 app.js中设置swagger的代码如下-

 const swaggerUi = require('swagger-ui-express');
 const YAML = require('yamljs');
 const swaggerDocument = YAML.load('./swagger.yml');
 const swaggerOptions = {
   explorer: true,
   validatorUrl: null,
   customCss: '.swagger-ui .topbar { display: none }',
   //  customCssUrl: '/custom.css'
   //  customJs: '/custom.js'
 };
 app.use(
   '/api-docs',
   function (req, res, next) {
     swaggerDocument.host = req.get('host');
     req.swaggerDoc = swaggerDocument;
     next();
   },
   swaggerUi.serve,
   swaggerUi.setup(null, swaggerOptions)
 );

我能够调用 Administrator 项目的 APIs,因为 swagger 的设置在同一个项目中(同一个服务器和同一个端口)。 我从服务器下拉列表中为身份验证项目选择了适当的服务器(本地主机)和端口(3005)。 但是,当我尝试从身份验证项目调用身份验证项目的 APIs 时,出现 CORS 错误。

我阅读了关于 CORS 错误的文档 swagger documentation。 根据文档,我在调用 API 时添加了相关的 CORS headers 并在后端为快速服务器设置了 CORS。

Java 中的一个 relevant 相关问题。

由于消息出现在控制台中(见评论):

Refused to connect to 'localhost:3005/auth/login' because it violates the following Content Security Policy directive: "default-src 'self'". Note that 'connect-src' was not explicitly set, so 'default-src' is used as a fallback.

这意味着 CSP 正在干扰并阻止连接。事实是 'self' 仅涵盖标准端口(http:/ws: 为 80,如果 https:/wss: 为 443)。
因此,您必须在内容安全策略中将 default-src 'self'" 更改为 default-src 'self' localhost:3005(具有确切的端口号)。由于 connect-src 被省略,它回退到 default-src.

使用default-src 'self' localhost:*规则可能更好(*表示任意端口号)。浏览器将 localhost 视为安全来源(您拥有的设备),因此足够安全以允许 localhost.
上的任何端口 在这种情况下,回退指令(img-srcscript-srcstyle-srcframe-src 等)不会阻止从任何端口上的本地主机下载的任何源,这在发展模式.

注1:但是,如果需要为生产模式准备CSP,可以在相关指令中放置屏蔽源。在这种情况下,CSP 将为 default-src 'self'; connect-src localhost:*;,因为在 connect-src.

中观察到阻塞

注2:很有可能的CSP header default-src 'self'Helmet middleware 设置,其最新版本使用默认规则自行发布CSP。