Node.js 将不同项目的 Swagger 文档合并为一个项目
Combining Swagger documentation of different projects into one project in Node.js
我正在进行两个项目,即管理员和身份验证。
管理员项目托管在本地端口 3002 上,身份验证项目托管在本地端口 3005 上。
我确实使用库 swagger-ui-express
和 yamljs
在管理员上设置了 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-src
、script-src
、style-src
、frame-src
等)不会阻止从任何端口上的本地主机下载的任何源,这在发展模式.
注1:但是,如果需要为生产模式准备CSP,可以在相关指令中放置屏蔽源。在这种情况下,CSP 将为 default-src 'self'; connect-src localhost:*;
,因为在 connect-src
.
中观察到阻塞
注2:很有可能的CSP header default-src 'self'
由Helmet middleware 设置,其最新版本使用默认规则自行发布CSP。
我正在进行两个项目,即管理员和身份验证。
管理员项目托管在本地端口 3002 上,身份验证项目托管在本地端口 3005 上。
我确实使用库 swagger-ui-express
和 yamljs
在管理员上设置了 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-src
、script-src
、style-src
、frame-src
等)不会阻止从任何端口上的本地主机下载的任何源,这在发展模式.
注1:但是,如果需要为生产模式准备CSP,可以在相关指令中放置屏蔽源。在这种情况下,CSP 将为 default-src 'self'; connect-src localhost:*;
,因为在 connect-src
.
注2:很有可能的CSP header default-src 'self'
由Helmet middleware 设置,其最新版本使用默认规则自行发布CSP。