【问题标题】:How do I deliver my bundle.js file with my html in GO using gorilla/mux如何使用 gorilla/mux 在 GO 中提供带有我的 html 的 bundle.js 文件
【发布时间】:2018-08-11 22:29:25
【问题描述】:

我正在尝试制作一个带有 Go 后端和 React 前端的简单服务器。为此,我需要发送我的静态 html 和 bundle.js 文件。她的html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="https://cdn.rawgit.com/twbs/bootstrap/48938155eb24b4ccdde09426066869504c6dab3c/dist/css/bootstrap.min.css">
     <title>Mern Gen</title>
  </head>
  <body>
<main id='root'>
  App has crashed
</main>
<script src="../public/bundle.js" 
type="text/javascript"></script>
</body>
</html>

目前我这样做是为了将两个文件都传送到“/”网址

bs := http.FileServer(http.Dir("public"))
http.Handle("/public/", http.StripPrefix("/public/", bs))

fs := http.FileServer(http.Dir("./static"))
http.Handle("/", fs)

我现在需要使用 gorilla/mux 来匹配这样的可变参数

r.HandleFunc("/loc/{id}", getLoc)

但如果我这样做了,我还必须从默认多路复用器更改为大猩猩路由器

r := mux.NewRouter()
bs := http.FileServer(http.Dir("public"))
r.Handle("/public/", http.StripPrefix("/public/", bs))

fs := http.FileServer(http.Dir("./static"))
r.Handle("/", fs)

这不起作用。我收到一条错误消息,提示找不到我的 bundle.js。如何使用 gorilla mux 做到这一点?

【问题讨论】:

    标签: reactjs go


    【解决方案1】:

    您应该使用PathPrefix 来提供public 目录中的文件:

    r := mux.NewRouter()
    
    bs := http.FileServer(http.Dir("public"))
    r.PathPrefix("/public/").Handler(http.StripPrefix("/public/", bs))
    
    fs := http.FileServer(http.Dir("./static"))
    r.Handle("/", fs)
    
    http.Handle("/", r)
    

    参考Gorilla mux document

    【讨论】: