4 回答
TA贡献1793条经验 获得超6个赞
这个问题与 Echo 没有严格的关系。Angular 进行路由的方式是它不从服务器请求页面。它更改了 URL 而没有实际从服务器请求另一个页面。
因此,当您转到“/home”,然后刷新时,您的浏览器将尝试访问服务器并向其请求“/home”(与第一次相反,浏览器请求映射到“dist/”的“/” index.html”)。在 Echo 路由中找不到或未定义“/home”。因此,您会收到一条“未找到”消息。
我建议您执行以下有关路由的操作
e.Static("/dist", "dist")
e.File("/*", "dist/index.html")
e.Start(":3000")
并在index.html请求资源的 URL 之前添加“/dist”。
TA贡献1803条经验 获得超6个赞
echo中的static middleware也有一个HTML5选项:eg
e.Use(middleware.StaticWithConfig(middleware.StaticConfig{
Root: "dist",
Index: "index.html",
Browse: true,
HTML5: true,
}))
这似乎处理 SPA 网页。
TA贡献1909条经验 获得超7个赞
将此留在这里作为替代方案,以防万一有人想要一个完整的示例。使用“/*”将捕获任何以“/”开头的路由或您想要的任何尚未定义的前缀。
package main
import (
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
)
const (
HTTP_PORT = ":1234"
)
func main() {
e := echo.New()
// Logger Middleware
e.Use(middleware.Logger())
// Setup routes
SetupRoutes(e)
e.Logger.Fatal(e.Start(HTTP_PORT))
}
func SetupRoutes(e *echo.Echo) {
// Catpure route /
e.GET("/", getWebApp)
// Catpure route /test
e.GET("/test", getTest)
// Catpure all routes starting with / that haven't been defined
e.GET("/*", getWebApp)
// Use e.Any() for all request methods GET, PUT, POST, PATCH and DELETE
e.Any("/*", getWebApp)
}
func getWebApp(ctx echo.Context) error {
return ctx.File("../website_src/index.html")
}
func getTest(ctx echo.Context) error {
return ctx.String(http.StatusOK, "Hello")
}
TA贡献1859条经验 获得超6个赞
在深入了解 Echo 之后,我也设法找到了另一种解决方案。Echo 有一个处理所有未知路由的 NotFoundHandler,所以我所做的只是让它在每次请求未定义的路由时返回“index.html”。这是我的代码:
echo.NotFoundHandler = func(c echo.Context)
return c.File("dist/index.html")
}
e := echo.New()
e.Static("/", "dist")
e.Start(":3000")
我不确定这是否是一个好方法,但对于像我这样有同样问题的人来说,这是另一种选择
- 4 回答
- 0 关注
- 116 浏览
添加回答
举报