gpt4 book ai didi

node.js - 在 Firebase Functions 服务器中设置 Swagger Ui

转载 作者:行者123 更新时间:2023-12-03 07:59:36 29 4
gpt4 key购买 nike

我在 Firebase Cloud Functions 上开发了一个 API,我想包含它的文档路径。我正在使用 swagger,并且可以在本地成功测试它 (localhost:PORT/docs),但是当我将该函数部署到 Firebase 时,它​​不起作用,它会将我重定向到授权页面。

我想我明白了这是为什么:

假设我的云函数的名称是 cfunc。那么它的基本 url 类似于 https://region-name-project-name.cloudfunctions.net/cfunc 。基于我如何包含 swagger 文档:

const swaggerDoc = require('./docs/swagger.config.json')
app.use(
'/docs',
allowCors,
swaggerUi.serve,
swaggerUi.setup(swaggerDoc, {
customCssUrl: '/assets/swagger.css',
customSiteTitle: 'My Function Title',
customfavIcon: '/assets/logo.ico',
swaggerOptions: {
supportedSubmitMethods: [] //to disable the "Try it out" button
}
})
)

文档应位于 https://region-name-project-name.cloudfunctions.net/cfunc/docs 。当我尝试访问该 URL 时,在浏览器 DevTools 中观看“网络”,它尝试在该 URL 上执行 GET 响应 304,然后重定向到 https://region-name-project-name.cloudfunctions.net/docs这就是打开 Google 身份验证页面的原因,因为没有名为“docs”的云函数,因此 Google 认为我正在尝试访问 Firebase Cloud Functions 中的其他内容(如果我执行类似 https://region-name-project-name.cloudfunctions.net/tomato 的操作,也会发生同样的情况)

但我仍然不知道如何修复此重定向或为什么会发生这种情况。我尝试将 Cloud Function URL 添加到 swagger.config.json 文件的主机参数中,并对 CORS 进行一些修改,例如允许更多请求方法、添加 json 作为内容类型、允许 header 进行身份验证,但似乎没有任何效果。

希望我说得足够清楚,如果没有告诉我您需要的任何其他信息(这是我在这里发布的第一篇文章:B)

最佳答案

找到解决方案

在测试了一堆不同的东西之后,我发现重定向实际上总是在删除路径的一部分之后发生,例如,我将文档端点更改为“/something/docs”,并且在访问 URL 时将是 https://region-name-project-name.cloudfunctions.net/cfunc/something/docs它重定向到https://region-name-project-name.cloudfunctions.net/cfunc/docs它没有提出 Google 身份验证,但现在不是我的文档的有效路径,因此它返回“无法获取/cfunc/docs”。

出于某种原因,如果您在文档 URL 末尾添加额外的正斜杠 ('/'),​​则不会发生此重定向。因此,在第一种情况下,文档的端点仅为“/docs”,访问 URL https://region-name-project-name.cloudfunctions.net/cfunc/docs/可以。我不知道为什么会这样,我可能会在 swagger 存储库上发布一个问题,但是如果有人有一些关于为什么或如何使其工作的额外数据,否则听到会很棒。

希望这对其他人有帮助!

编辑:哦,还有一件事我忘记了,如果你设置 swagger-ui as if you were using express Router 显然会更好,即使您不是(也许 Firebase 使用路由器之类的东西加载云功能),所以不要使用 app.use('/docs', swagger-ui.serve, swagger-ui.setup(swagger-file )) 执行 app.use('/docs', swagger-ui.serve) 然后 app.get('/docs', swagger-ui.setup(swagger) -文件))

关于node.js - 在 Firebase Functions 服务器中设置 Swagger Ui,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74803435/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com