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

带有url参数和mysql数据库的go-chi路由器工作不正常,mysql,go,go-chi,Mysql,Go,Go Chi,我是刚来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})

我是刚来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: {n}

我可以知道这里的问题吗


另外,在主功能中有
router.Mount(“/project/”,restaurant.NewRouter(dm))

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

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

请看这里的区别:

路径参数

访问地址:

func main(){
r:=chi.NewRouter()
r、 Get(“/name/{name}”),func(w http.ResponseWriter,r*http.Request){
w、 写入([]字节(“hi”+chi.URLParam(r,“name”))
})
http.listendServe(“:3333”,r)
}
查询参数

访问地址:


func main(){
r:=chi.NewRouter()
r、 Get(“/name”,func(w http.ResponseWriter,r*http.Request){
w、 写入([]字节(“hi”+r.URL.Query().Get(“name”))
})
http.listendServe(“:3333”,r)
}

我相信正确的端点url应该是
http://localhost:8000/restaurant/search?name={n} 
而且,由于您的端点使用
POST
方法注册。然后从浏览器中点击它将导致404错误。你应该试着用POST方法点击它谢谢你的回答,但是我忘了说在主函数中有router.Mount(“/project/”,restaurant.NewRouter(dm))@mrka@Hunssh您能否尝试从
路由器.Mount(“/project/
”)中删除第二个
/
?尝试执行
路由器.Mount(/project),restaurant.NewRouter(dm))