生产中的vue-router(与Go一起服务)

时间:2017-09-10 19:44:37

标签: go vue.js vuejs2 vue-router go-chi

我想完全分离客户端和服务器,因此我使用const App = ()=> ( <div> <Main/> <Footer/> </div> ); 创建了一个vuejs项目。在这个项目中,我使用vue-router进行所有路由(包括特殊路径,如vue init webpack my-project ..

这是我的routes.js文件:

/user/SOMEID

当我使用import App from './App.vue' export const routes = [ { path: '/', component: App.components.home }, { path: '/user/:id', component: App.components.userid }, { path: '*', component: App.components.notFound } ] 运行应用程序时,一切都运行良好。我现在已准备好部署到云端,因此我运行了npm run dev。由于我需要使用HTTP服务器,所以我决定使用Go来实现这一点。这是我的Go文件:

npm run build

我能够加载主页(package main import ( "fmt" "github.com/go-chi/chi" "github.com/me/myproject/server/handler" "net/http" "strings" ) func main() { r := chi.NewRouter() distDir := "/home/me/code/go/src/github.com/me/myproject/client/dist/static" FileServer(r, "/static", http.Dir(distDir)) r.Get("/", IndexGET) http.ListenAndServe(":8080", r) } func IndexGET(w http.ResponseWriter, r *http.Request) { handler.Render.HTML(w, http.StatusOK, "index", map[string]interface{}{}) } func FileServer(r chi.Router, path string, root http.FileSystem) { if strings.ContainsAny(path, "{}*") { panic("FileServer does not permit URL parameters.") } fs := http.StripPrefix(path, http.FileServer(root)) if path != "/" && path[len(path)-1] != '/' { r.Get(path, http.RedirectHandler(path+"/", 301).ServeHTTP) path += "/" } path += "*" r.Get(path, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fs.ServeHTTP(w, r) })) } ),其中一切似乎都有效(css,图像,翻译,调用和来自服务器的响应)..但是当我尝试打开应该导致404或加载用户的其他路由,然后我只是在明文中得到响应App.components.home(而不是它应该呈现的vue notFound组件)..

任何想法我做错了什么以及如何解决它?

编辑:这是main.js文件中路由器设置的另一部分:

404 page not found

1 个答案:

答案 0 :(得分:3)

我可能错了,但是您尝试访问的路径可能会在服务器中解析(在Go http服务器中)。

您可以尝试删除vue-router初始化中的mode: 'history',使其默认为hash模式(然后路由将在浏览器中解析)。请参阅this链接。