【问题标题】:How to set context-path for go-chi?如何为 go-chi 设置上下文路径?
【发布时间】:2020-08-18 08:50:40
【问题描述】:

在 Spring Boot 应用程序中,可以使用属性 server.servlet.context-path 为所有 API 资源设置基本路径。所以实际的端点路径将是server.servlet.context-path + endpoint path

例如,如果server.servlet.context-path 设置为“/api/v1”,并且资源映射到“articles”,则该资源的完整路径为“/api/v1/articles”。

go-chi 有这样的东西吗?还是我必须用“完整”路径定义一个路由,比如

r.Route("/api/v1/articles", func(r chi.Router) {...

谢谢

【问题讨论】:

  • 这本身与气无关。在 Go 中,每个路由器也是一个 HTTP 处理程序。所以这样做的方法是将一个多路复用器设置为你想要的路径的处理程序。那么该多路复用器下的任何内容都在该路径的“上下文”中。

标签: go go-chi


【解决方案1】:

这只是一个粗略的示例,希望可以为您指明方向。如您所见,.Mount() 接受一个模式,然后是一个.Router。玩弄这两者并弄清楚你想如何构建它。

package main 

import (
    "github.com/go-chi/chi"
    "net/http"
)

func main() {
    r := chi.NewRouter()
    
    r.Mount("/api", Versions())

    http.ListenAndServe("localhost:8080", r)
}

func Versions() chi.Router {
    r := chi.NewRouter()
    r.Mount("/v1", V1())
 // r.Mount("/v2", V2())
    return r    
}

func V1() chi.Router {
    r := chi.NewRouter()
    r.Mount("/user", User())
//  r.Mount("/posts", Post())
    return r
}

func User() chi.Router {
    r := chi.NewRouter()
    r.Route("/hello", func(r chi.Router){
        r.Get("/", hello)
    })
    return r
}

func hello(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Hello"))
}

访问localhost:8080/api/v1/user/hello 应该会得到“Hello”响应。

【讨论】:

    猜你喜欢
    • 2019-01-20
    • 2015-09-09
    • 1970-01-01
    • 2012-03-13
    • 2011-02-23
    • 2019-08-22
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多