gpt4 book ai didi

mysql - 带有 url 参数的 go chi 路由器和 mysql 数据库无法正常工作

转载 作者:行者123 更新时间:2023-11-29 15:16:58 24 4
gpt4 key购买 nike

我是 golang 新手,正在使用 chi 在 golang 中开发一个 Restful 服务。我正在尝试创建一条路线,如下所示:

    func NewRouter(dm *storage.DatabaseManager) chi.Router {
var router = chi.NewRouter()
router.Method("POST", "/restaurant/search?name={name}",
&SearchRestaurants{DB: dm})

}

这是我从 mysql 数据库获取数据的方法:

    func (rm *RestaurantManager) SearchRestaurantsFromDB(name string) 
([]Restaurant, error) {
var restaurants []Restaurant
var stmt = fmt.Sprintf(`SELECT * FROM %s WHERE name=%s `,
rm.tableName, name)
var err error
if err = rm.Select(&restaurants, stmt); err != nil {
return nil, err
}
return restaurants, nil

}

...以及我如何从中得到:

func (h SearchRestaurants) ServeHTTP(w http.ResponseWriter, r 
*http.Request) {
var err error
var result []storage.Restaurant
name := r.URL.Query().Get("name")
if result, err = h.DB.SearchRestaurantsFromDB(name); err != nil {
log.Fatal("Database Error: ", err)
}
fmt.Print(result)
api.WriteJSON(w, result)
log.Print(r.RequestURI)

}

但我尝试到达此端点,但收到 404 not found: http://localhost:8000/project/restaurant/search?name= {n}

我可以知道这里的问题吗?

P.S.主函数中有router.Mount("/project/",restaurant.NewRouter(dm))

最佳答案

我不知道chi,但我认为你误解了路由器路径

您实际上不使用查询参数来定义路径路由器,路径上的变量(如 {n})用于路径参数。您使用的是查询参数。

看看这里的区别:

路径参数

访问来源:http://localhost:3333/name/JohnDoe

func main() {
r := chi.NewRouter()

r.Get("/name/{name}", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("hi" + chi.URLParam(r, "name")))
})

http.ListenAndServe(":3333", r)
}

查询参数

访问来源:http://localhost:3333/name?name=JohnDoe


func main() {
r := chi.NewRouter()

r.Get("/name", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("hi" + r.URL.Query().Get("name")))
})

http.ListenAndServe(":3333", r)
}

关于mysql - 带有 url 参数的 go chi 路由器和 mysql 数据库无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59639450/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com