使用go net / http mux

时间:2016-01-18 23:27:30

标签: http go reactjs

我正在构建一个api,它也可以为我的反应前端应用程序提供服务,但是我的index.html服务有问题

鉴于它不是真正的模板,我不使用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,
    },
}

router.go

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与可执行文件相关(但我也尝试过与处理程序有关)

更新

我能够使用此问题中显示的方法来提供html文件:How do you serve a static html file using a go web server?但是,使用mux和更模块化的文件结构仍会产生漂亮漂亮的空白页。

1 个答案:

答案 0 :(得分: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)
}