使用 go net/http mux 为单页应用程序提供服务

我正在构建一个 api,它也为我的 React 前端应用程序提供服务,但是在为我的 index.html 提供服务时遇到了问题


鉴于它不是真正的 go 模板,我没有使用 html/template。


我没有看到在所有未在路由中启动 /api 的页面上为我的应用程序的静态 html 根提供服务的严格方式。


除了 gorilla 的 mux,我故意不使用任何 Go 框架


我的 handler.go:


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

    http.FileServer(http.Dir("./views"))

}

Routes.go:


type Route struct {

    Name        string

    Method      string

    Pattern     string

    HandlerFunc http.HandlerFunc

}


type Routes []Route


var routes = Routes{

    Route{

        "Index",

        "GET",

        "/",

        Index,

    },

}

路由器


import (

    "net/http"


    "github.com/gorilla/mux"

)


func NewRouter() *mux.Router {


    router := mux.NewRouter().StrictSlash(true)

    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(handler)


    }


    return router

}

主要的:


package main


import (

    "./server"

    "log"

    "net/http"

)


func main() {


    router := server.NewRouter()


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

}

目前出现一个空白页面,仅此而已。我的 index.html 位于/views/index.html与可执行文件相关的位置(但我也尝试过与处理程序相关)


MMMHUHU
浏览 282回答 1
1回答

九州编程

在 handler.go 中,您的 Index 函数实际上是一个空操作,因为http.FileServer()返回一个 Handler,它永远不会传递 ResponseWriter 或 Request,因此是空白页。也许尝试这样的事情至少可以通过:func Index(w http.ResponseWriter, r *http.Request) {    http.FileServer(http.Dir("./views")).ServeHTTP(w, r)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go