Go:在我的 API 端点旁边提供静态页面(它们的端点)

所以我遇到了一个问题,我只能让我的 API 端点工作或我的静态文件工作。我使用 gorilla/mux 作为我的路由器,它可能与配置有关。


我有四个文件,我认为在这种情况下很重要:


main.go


func main() {

    envVars()


    router := NewRouter()


    log.Fatal(http.ListenAndServe(":8080", router))


}

路由器


func NewRouter() *mux.Router {

    // create new router

    router := mux.NewRouter()


    for _, route := range routes {

        var handler http.Handler


        handler = route.HandlerFunc

        handler = Logger(handler, route.Name)


        router.

            Methods(route.Method).

            Path(route.Pattern).

            Name(route.Name).

            Handler(route.HandlerFunc)

    }


    return router


}

路线


var routes = Routes{


    Route{

       // TODO: Find way to render static file

       "Index",

        "GET",

        "/",

        Index,

    },

    Route{

        "PostIndex",

        "GET",

        "/api/posts",

        PostIndex,

    },

    Route{

        "PostCreate",

        "POST",

        "/api/posts",

        PostCreate,

    },

}

handlers.go


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

    // TODO: Something to render html file

}

通过研究,我认为我可以使用子路由器,但似乎应该有更好的方法来做到这一点。对于我已经实现的所有其他路由,但是为了呈现 html 文件,我不确定该方法中会放什么。


查看整个项目,请访问:https : //github.com/nicholasrucci/blog



神不在的星期二
浏览 133回答 2
2回答

沧海一幻觉

更新了 代码以修复错误。仅将文件服务器绑定到根路径,让其他路由自由供其他处理程序使用。删除routes.go中的Index路由并像这样更新router.go:func NewRouter() *mux.Router {    // create new router    router := mux.NewRouter()    for _, route := range routes {        var handler http.Handler        handler = route.HandlerFunc        handler = Logger(handler, route.Name)        router.            Methods(route.Method).            Path(route.Pattern).            Name(route.Name).            Handler(route.HandlerFunc)    }    router.Path("/").Handler(http.FileServer(http.Dir("public/")))    return router}这将在您的域根目录下的公共目录中公开 index.html 文件。

森栏

我最终做的是制作一个模板函数并从那里渲染我的 HTML。func Index(w http.ResponseWriter, r *http.Request) {&nbsp; &nbsp; t := template.New("Test")&nbsp; &nbsp; t, err = t.Parse("<html><body>Hello World</body></html>)&nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; log.Fatal(err)&nbsp; &nbsp; }&nbsp; &nbsp; err = t.Execute(w, t)&nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; log.Fatal(err)&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go