如何在云函数中提供静态文件,如 swagger ui

如何使用 Go 在 Cloud Function 中提供swagger-ui-dist ?


在 Cloud Functions 环境之外,我会这样做:


package main


import (

"fmt"

"net/http"

)


func main() {


fs := http.FileServer(http.Dir("./swagger-ui-dist"))

http.Handle("/swaggerui/", http.StripPrefix("/swaggerui/", fs))


http.ListenAndServe(":8080", nil)

}

但由于云函数使用标准 http.HanlderFunc 接口使用普通函数作为处理程序,我不知道如何使其工作。


我试图模拟这种情况以使用 http.ServeFile 进行测试,但没有奏效。似乎没有下载文件夹的所有内容。


package main


import (

    "fmt"

    "net/http"

)


func cloudFunctionHandler(w http.ResponseWriter, r *http.Request) {

    http.ServeFile(w, r, "./swagger-ui-dist")

}

func main() {


    http.HanldeFunc("/swaggerui/", handler)

    http.ListenAndServe(":8080", nil)

}


陪伴而非守候
浏览 165回答 2
2回答

MMTTMM

实际上可以通过三种方式(我知道):从 CDN 提供静态文件。例如来自http://cdnjs.cloudflare.com/ajax/libs/swagger-ui/3.40.0/自己在不同的端点上托管静态文件将静态文件添加到云函数的根文件夹中。这些将与您的代码一起打包,因此在部署时可用(我选择了选项 3)对于选项 2 和 3,您必须覆盖 swaggerui 用于其静态资产的文件夹。如何执行此操作取决于您如何配置 swagger ui。就我而言,我使用的是 flask_restx Python 包来生成swagger.json并提供 swaggerui。所以我像这样猴子补丁:from flask_restx.apidoc import apidocapidoc.static_folder = '<MY STATIC FOLDER PATH' # e.g. os.path.abspath('static/swaggerui')此外,您需要在运行之前将文件从 swaggerui 库复制到函数的根目录gcloud function deploy ...。static在 CI 管道期间,我将文件夹从 flask_restx复制到函数的根目录。希望这对任何人都有帮助!

ITMISS

我以多种方式尝试了它,它在本地以与 Cloud Functions 相同的行为(相同的函数签名)工作,但在 Cloud Functions 上部署后它没有工作。我明白为什么了。事实上,Buildpack(Google 开发的用于构建没有 Dockerfile 的容器的工具,现在在 CNCF 沙箱中)编译 .go 文件并将二进制文件复制到最终容器层。省略所有其他文件/目录。因此,它不能工作!我推荐你使用Cloud Run(与 Cloud Functions 相同的底层平台,并且在某些情况下更便宜。我写了一篇关于此的文章)另一种解决方案是使用未编译的语言,例如 NodeJS 或 Python。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go