路由

[[toc]]

介绍

Goravel 路由模块可以使用 facades.Route 进行操作。

默认路由文件

所有路由文件都在 /routes 目录中进行定义。框架默认有一个示例路由 /routes/web.go,其中 func Web() 方法被注册到 app/providers/route_service_provider.go 文件中,以实现路由的绑定。

你可以在 routes 目录下新增路由文件,以进行更细颗粒的管理,然后在 app/providers/route_service_provider.go 文件中进行注册。

启动 HTTP 服务器

在根目录下 main.go 中启动 HTTP 服务器

  1. package main
  2. import (
  3. "github.com/goravel/framework/facades"
  4. "goravel/bootstrap"
  5. )
  6. func main() {
  7. //This bootstraps the framework and gets it ready for use.
  8. bootstrap.Boot()
  9. //Start http server by facades.Route.
  10. go func() {
  11. if err := facades.Route.Run(facades.Config.GetString("app.host")); err != nil {
  12. facades.Log.Errorf("Route run error: %v", err)
  13. }
  14. }()
  15. select {}
  16. }

路由方法

方法 作用
Run 启动 HTTP 服务器
Group 路由分组
Prefix 路由前缀
ServeHTTP 测试路由
Get 基本路由
Post 基本路由
Put 基本路由
Delete 基本路由
Patch 基本路由
Options 基本路由
Any 基本路由
Static 文件路由
StaticFile 文件路由
StaticFS 文件路由
Middleware 中间件

基本路由

  1. facades.Route.Get("/", func(ctx http.Context) {
  2. ctx.Response().Json(nethttp.StatusOK, http.Json{
  3. "Hello": "Goravel",
  4. })
  5. })
  6. facades.Route.Post("/", userController.Show)
  7. facades.Route.Put("/", userController.Show)
  8. facades.Route.Delete("/", userController.Show)
  9. facades.Route.Patch("/", userController.Show)
  10. facades.Route.Options("/", userController.Show)
  11. facades.Route.Any("/", userController.Show)

路由分组

  1. facades.Route.Group(func(route route.Route) {
  2. route.Get("group/{id}", func(ctx http.Context) {
  3. ctx.Response().Success().String(ctx.Request().Query("id", "1"))
  4. })
  5. })

路由前缀

  1. facades.Route.Prefix("users").Get("/", userController.Show)

文件路由

  1. facades.Route.Static("static", "./public")
  2. facades.Route.StaticFile("static-file", "./public/logo.png")
  3. facades.Route.StaticFS("static-fs", nethttp.Dir("./public"))

路由传参

  1. facades.Route.Get("/input/{id}", func(ctx http.Context) {
  2. ctx.Response().Success().Json(http.Json{
  3. "id": ctx.Request().Input("id"),
  4. })
  5. })

详见请求

中间件

  1. import "github.com/goravel/framework/http/middleware"
  2. facades.Route.Middleware(middleware.Cors()).Get("users", userController.Show)

详见中间件

测试路由

  1. func TestHttp(t *testing.T) {
  2. w := httptest.NewRecorder()
  3. req, err := http.NewRequest("GET", "/users", nil)
  4. assert.Nil(t, err)
  5. facades.Route.ServeHTTP(w, req)
  6. assert.Equal(t, 200, w.Code)
  7. assert.Equal(t, "1", w.Body.String())
  8. }