无法使用 golang 服务器定位静态脚本

我写了一个 golang 网络服务器,我之前提供静态资源,但在改变我的项目结构后,这不再有效。


这是我的项目结构


ProjectFolder/

    node_modules/

    scripts/

       test.es6.js

    server/

       handlers.go

       main.go

       routes.go

    static/

       scripts/

          test.js

          test.js.map

    Gruntfile.js

    index.html

    package.json

这是我的 index.html


<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>

<script type="text/javacript" src="//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.2.1/backbone-min.js"></script>

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script>

<script type="text/javascript" src="/static/scripts/test.js"</script>

<body>

    <div id="chart"></div>

</body>

这是我的routes.go


func NewRouter() *mux.Router {


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

    for _, route := range routes {

        router.

            Methods(route.Method).

            Path(route.Pattern).

            Name(route.Name).

            Handler(route.HandlerFunc)

    }


    for pathName, pathValue := range staticPaths {

        pathPrefix := "/" + pathName + "/"

        fmt.Println(pathPrefix)

        fmt.Println(pathValue)

        router.PathPrefix(pathPrefix).Handler(http.StripPrefix(pathPrefix, http.FileServer(http.Dir(pathValue))))

    }



    // router.PathPrefix("/static/scripts").Handler(http.FileServer(http.Dir("./static/scripts/")))

    return router

}


var staticDirectory = "/static"


var staticPaths = map[string]string{

    "scripts": staticDirectory + "/scripts/",

}


var routes = Routes{

    Route{

        "Index",

        "GET",

        "/",

        Index,

    },

}

当我点击 localhost:8200 时,我在加载 test.js 时得到 404,但 index.html 正在被点击。


以前,这是不使用 http.FileServer 来提供静态资源的问题,但我现在正在使用它。


我已经尝试过 index.html 中路径的其他变体


src= "static/scripts/test.js"

src= "../static/scripts/test.js"

到底是怎么回事?


繁华开满天机
浏览 150回答 1
1回答

撒科打诨

请尝试以下操作:// Create new router.gorillaMux := mux.NewRouter()// Match /res/ prefix to local /res/ folder.gorillaMux.PathPrefix("/res/").Handler(http.StripPrefix("/res/", http.FileServer(http.Dir("./res/"))))这将使http://example.com/res/js/script.js寻找./res/js/script.js因此,您必须在 HTML 中完全限定您的资源: src= "/static/scripts/test.js"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go