我正在制作一个 api 并使用 swaggo/swag 构建一个 swagger 界面。以前,我使用 net/http 包,一切正常。
我切换到 julienschmidt/httprouter,但我无法使 swagger 界面再次工作。这是我的代码
package main
import (
"fmt"
"log"
"net/http"
"github.com/julienschmidt/httprouter"
httpSwagger "github.com/swaggo/http-swagger"
)
func main() {
router := httprouter.New()
router.ServeFiles("/api/doc/static/*filepath", http.Dir("api/swagger/static"))
router.HandlerFunc(http.MethodGet, "/api/doc/index.html", swaggerHandler)
// router.HandlerFunc(http.MethodGet, "/api/doc", swaggerHandler)
fmt.Println("Server on port 8080")
log.Fatal(http.ListenAndServe(":8080", router))
}
func swaggerHandler(w http.ResponseWriter, r *http.Request) {
swaggerFileUrl := "http://localhost:8080/api/doc/static/swagger.json"
handler := httpSwagger.Handler(httpSwagger.URL(swaggerFileUrl))
handler.ServeHTTP(w, r)
}
Run Code Online (Sandbox Code Playgroud)
我检查了swaggerFileUrl变量是否正确,并且我可以使用此 url 访问 json 文件。该界面是一个完整的空白页面,标题为“Swagger UI”。因为标题已被替换,所以我假设发生了一些事情,但我不知道问题是来自 httpSwagger 还是 httprouter。
编辑:问题是由于加载界面的 javascript 文件不存在而引起的。请参阅这个github 问题
小智 5
你可以这样做:
routes := httprouter.New()
routes.GET("/doc/:any", swaggerHandler)
func swaggerHandler(res http.ResponseWriter, req *http.Request, p httprouter.Params) {
httpSwagger.WrapHandler(res, req)
}
Run Code Online (Sandbox Code Playgroud)
不要忘记导入 doc 文件
import (
_ "example.project/docs"
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1510 次 |
| 最近记录: |