我正在使用 Go(使用 Echo)作为后端和 Angular 6 作为前端来设置 Web 服务器。我所做的是使用 Angular-cli 'ng new my-app' 创建一个简单的应用程序,添加一个 helloworld 组件和一个 '/helloworld' 路由,然后使用 'ng build --prod' 将其构建到生产中,输出为 'dist ' 文件夹。文件夹结构:
dist
├── assets
│ ├── icons
│ └── logo.png
├── favicon.ico
├── index.html
├── main.js
├── polyfills.js
├── runtime.js
└── styles.css
然后,我让 Go 使用以下代码 main.go 为该“dist”文件夹中的静态文件提供服务
func main() {
e := echo.New()
e.Static("/", "dist")
e.File("/", "dist/index.html")
e.Start(":3000")
}
现在,当我使用浏览器并转到“localhost:3000/”时,页面将正确提供,由于 Angular 路由,我可以使用 href 导航,例如:“localhost:3000/home”页面将正确显示但是如果我尝试刷新它,那么 Echo 将返回一个显示的页面内容:
{“未找到信息”}
我知道我可以像这样手动设置路线:
e.File("/home","dist/index.html")
但是,如果我有更多的路线,那么做这一切会很麻烦。
我需要的是任何未为 Echo 定义的路由都将映射到“index.html”。我确实尝试过:
e.File("/*", "dist/index.html")
和
e.GET("/*", func(c echo.Context)
return c.File("dist/index.html")
})
但后来我得到一个有错误的空白页
"Uncaught SyntaxError: Unexpected token < "
包含所有 3 个文件 main.js、polyfill.js 和 runtime.js
我是 Echo 的新手,所以我不知道该怎么做。