当前位置: 首页 > 面试题库 >

使用GoLang Web服务器提供静态内容

冯曾笑
2023-03-14
问题内容

我正在探索Go的深度,并且我一直在尝试编写一个简单的Web应用程序来围绕所有内容。我正在尝试服务React.js应用程序。

下面是Go服务器的代码。我有默认的/服务路线,效果index.html很好。我正在努力允许将静态文件提供给该索引文件。尽管我需要静态提供JavaScript
/ CSS / Media文件,但我允许React App自己进行客户端路由。

例如,我需要能够将bundle.js文件index.html提供给React应用程序才能运行。目前,当我转到时,localhost:8000/dist/我看到文件正在列出,但是我从那里单击的每个文件/文件夹都抛出一个404 Page Not Found。有什么我想念的吗?向正确方向的推动将不胜感激。

Webserver.go

package main

import (
    "net/http"
    "log"
    "fmt"
    "os"

    "github.com/BurntSushi/toml"
    "github.com/gorilla/mux"
)

type ServerConfig struct {
    Environment string
    Host string
    HttpPort int
    HttpsPort int
    ServerRoot string
    StaticDirectories []string
}

func ConfigureServer () ServerConfig {
    _, err := os.Stat("env.toml")
    if err != nil {
        log.Fatal("Config file is missing: env.toml")
    }

    var config ServerConfig
    if _, err := toml.DecodeFile("env.toml", &config); err != nil {
        log.Fatal(err)
    }

    return config
}

func IndexHandler (w http.ResponseWriter, r *http.Request) {
    http.ServeFile(w, r, "./src/index.html")
}

func main () {
    Config := ConfigureServer()
    router := mux.NewRouter()

    // Configuring static content to be served.
    router.Handle("/dist/", http.StripPrefix("/dist/", http.FileServer(http.Dir("dist"))))

    // Routing to the Client-Side Application.
    router.HandleFunc("/", IndexHandler).Methods("GET")

    log.Printf(fmt.Sprintf("Starting HTTP Server on Host %s:%d.", Config.Host, Config.HttpPort))

    if err := http.ListenAndServe(fmt.Sprintf("%s:%d", Config.Host, Config.HttpPort), router); err != nil {
        log.Fatal(err)
    }
}

问题答案:

根据大猩猩mux
docs
执行此操作的正确方法是在上注册的处理程序PathPrefix,如下所示:

router.PathPrefix("/dist/").Handler(http.StripPrefix("/dist/", http.FileServer(http.Dir("dist"))))

如果您在文档中搜索类似之类的内容,则会找到一个示例PathPrefix("/static/")

缺省情况下,这种通配符行为实际上是通过net / http中的模式匹配机制来实现的,因此,如果您不使用大猩猩,而仅使用默认的net /
http,则可以执行以下操作:

http.Handle("/dist/", http.StripPrefix("/dist/", http.FileServer(http.Dir("dist"))))


 类似资料:
  • 我是Springboot的新手,我正在尝试在其根()路径上显示html页面。我在谷歌上搜索了一下- Spring Boot不提供静态内容 https://spring.io/blog/2013/12/19/serving-statige-web-content-with-spring-boot Spring Boot应用程序不提供静态内容 SpringBoot不提供静态内容 我几乎试了所有的办法,

  • 问题内容: 如何使用Go Web服务器提供index.html(或其他静态HTML文件)? 我只想要一个基本的静态HTML文件(例如,一篇文章),就可以从Go Web服务器上提供该文件。HTML应该可以在go程序之外进行修改,就像使用HTML模板时一样。 这是我的Web服务器,仅托管硬编码文本(“ Hello world!”)。 问题答案: 使用Golang net / http包,该任务非常容易

  • 我提供了一些静态文件,像图像和字体,没有任何问题。当我尝试对PDF文件做同样的操作时,我得到一个错误。 ./src/views/default/components/footer.js中出错 C:\resurs\repos\frontend\src\views\default\components\footer.js 5:17错误解析导入模块'src/includes/anvandaravtal_

  • 我无法访问静态内容(angular app),甚至无法访问简单的索引。来自spring boot的html文件。我一直收到404错误。Spring没有为我提供这些静态文件。自从升级到Spring Boot 2.2.4后,我就遇到了这个问题。我必须升级以应对Zip64问题。 我的application.properties里有这样一句话: 我也有自己的staticResourceConfigurat

  • 类似于另一个问题(参见过滤静态内容Jersey),我想从Jetty提供静态内容。在浩瀚的互联网上散布着几个类似的问题,但大多数都不涉及Guice,而那些涉及Guice的问题已经完全过时了。 我有一个现有的服务,使用泽西(1.12)和Guice(3)与以下: < code>MyGuiceConfig看起来像这样: 当我使用 时,我的服务按预期工作。但是,任何对静态内容的请求都会产生404。 如何在不

  • 问题内容: 我在两个不同的容器(Tomcat和Jetty)上部署了一个webapp,但是它们用于提供静态内容的默认servlet具有处理我要使用的URL结构的不同方式(详细信息)。 因此,我希望在web应用程序中包含一个小型servlet,以提供其自己的静态内容(图像,CSS等)。Servlet应该具有以下属性: No external dependencies Simple and reliab