在不同的路线上运行 SPA

所以我已经使用 Gorilla/Mux 在 Go 中设置了我的 SPA,但我想在不同的路由上运行它,这样我就可以将我的两个 Kubernetes 服务连接在一起(2 个不同的 SPA)。难道我必须将我的 kubernetes 服务更改为 /stock 吗?


我的一个服务在常规路径“/”上运行,我想添加第二个服务,以便当用户输入“https://URL/stock”时,我的第二个 SPA 服务(希望第二个 spa 在 /stock 上运行)


我知道一种方法就是将我的代码和诸如此类的东西合并到我的第一个服务中,但我想知道我是否可以这样做?


main.go


type spaHandler struct {

    staticPath string

    indexPath  string

}


func (h spaHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {

    path, err := filepath.Abs(r.URL.Path)

    if err != nil {

        http.Error(w, err.Error(), http.StatusBadRequest)

        return

    }


    path = filepath.Join(h.staticPath, r.URL.Path)


    _, err = os.Stat(path)

    if os.IsNotExist(err) {

        http.ServeFile(w, r, filepath.Join(h.staticPath, h.indexPath))

        return

    } else if err != nil {

        http.Error(w, err.Error(), http.StatusInternalServerError)

        return

    }


    http.FileServer(http.Dir(h.staticPath)).ServeHTTP(w, r)

}



func main() {

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

    //Serve Other Routes Above PathPrefix

    router.HandleFunc("/api/findStock", findStock)

    spa := spaHandler{staticPath: "./stock/build", indexPath: "index.html"}

    router.PathPrefix("/").Handler(spa) <------ any way to serve on /stock???


    svr := &http.Server{

        Handler: router,

        Addr:    ":8080",

        WriteTimeout: 15 * time.Second,

        ReadTimeout:  15 * time.Second,

    }


    log.Fatal(svr.ListenAndServe())

}

应用程序.js


class App extends Component {

  render(){

    return (

        <Router>

          <div>

            <section>

              <NavBar/>

              <Switch>

                <Route exact path='/'  component={Home}/>

              </Switch>

            </section>

          </div>

        </Router>

    );

  }

}


export default App;

我知道我可以在 App.js 中更改 /stock 的路径,但是当我到达 localhost:8080/ 时,它仍然显示我的导航栏


所以当我去 /stock 端点时,我得到


来自“www.url.com//static/css/2.d9ad5f5c.chunk.css”的资源由于 MIME 类型(“text/plain”)不匹配(X-Content-Type-Options: nosniff)而被阻止


我认为这是因为我的 Stock Service 默认路径在 main.go 中设置为 / 所以它试图从那里提供文件,但在网络上我试图从 /stock 访问它


小唯快跑啊
浏览 105回答 2
2回答

偶然的你

虽然可行,但如果您使用的是 Kubernetes,那么按照您的方式来做这件事似乎很笨拙。为什么不使用 2 个Kubernetes 服务,然后通过像Nginx这样的Ingress控制器连接到它们?例如:apiVersion: networking.k8s.io/v1kind: Ingressmetadata:&nbsp; name: minimal-ingressspec:&nbsp; rules:&nbsp; - http:&nbsp; &nbsp; &nbsp; paths:&nbsp; &nbsp; &nbsp; - path: /stock&nbsp; &nbsp; &nbsp; &nbsp; pathType: Exact&nbsp; &nbsp; &nbsp; &nbsp; backend:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; service:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name: stock-service&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; port:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; number: 80&nbsp; &nbsp; &nbsp; - path: /&nbsp; &nbsp; &nbsp; &nbsp; pathType: Prefix&nbsp; &nbsp; &nbsp; &nbsp; backend:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; service:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name: first-service&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; port:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; number: 80

慕侠2389804

因此,在进行大量研究后,我实际上自己找到了不同的解决方法。我在使用基于名称的虚拟主机/有两个不同的入口类时遇到了麻烦。我决定修改我的 react 应用程序根目录(以前不知道我可以这样做)包.json{"homepage": "stock",}我还在我的App.js中提供了我的 Home 组件/stock并改变了我的main.gorouter.PathPrefix("/stock").Handler(http.StripPrefix("/stock", spa))更新的代码将在上面进行更改
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go