为了账号安全,请及时绑定邮箱和手机立即绑定

在不同的路线上运行 SPA

在不同的路线上运行 SPA

Go
小唯快跑啊 2022-06-27 16:09:28
所以我已经使用 Gorilla/Mux 在 Go 中设置了我的 SPA,但我想在不同的路由上运行它,这样我就可以将我的两个 Kubernetes 服务连接在一起(2 个不同的 SPA)。难道我必须将我的 kubernetes 服务更改为 /stock 吗?我的一个服务在常规路径“/”上运行,我想添加第二个服务,以便当用户输入“https://URL/stock”时,我的第二个 SPA 服务(希望第二个 spa 在 /stock 上运行)我知道一种方法就是将我的代码和诸如此类的东西合并到我的第一个服务中,但我想知道我是否可以这样做?main.gotype 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())}应用程序.jsclass 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 访问它
查看完整描述

2 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

虽然可行,但如果您使用的是 Kubernetes,那么按照您的方式来做这件事似乎很笨拙。为什么不使用 2 个Kubernetes 服务,然后通过像Nginx这样的Ingress控制器连接到它们?例如:


apiVersion: networking.k8s.io/v1

kind: Ingress

metadata:

  name: minimal-ingress

spec:

  rules:

  - http:

      paths:

      - path: /stock

        pathType: Exact

        backend:

          service:

            name: stock-service

            port:

              number: 80

      - path: /

        pathType: Prefix

        backend:

          service:

            name: first-service

            port:

              number: 80


查看完整回答
反对 回复 2022-06-27
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

因此,在进行大量研究后,我实际上自己找到了不同的解决方法。我在使用基于名称的虚拟主机/有两个不同的入口类时遇到了麻烦。


我决定修改我的 react 应用程序根目录(以前不知道我可以这样做)


包.json


{

"homepage": "stock",

}

我还在我的App.js中提供了我的 Home 组件/stock


并改变了我的main.go


router.PathPrefix("/stock").Handler(http.StripPrefix("/stock", spa))

更新的代码将在上面进行更改


查看完整回答
反对 回复 2022-06-27
  • 2 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信