go Чи роутер с параметрами URL и mysql дБ не работает должным образом - PullRequest
0 голосов
/ 08 января 2020

Я новичок в golang и работаю над отдыхающим сервисом в golang, используя чи. Я пытаюсь создать маршрут, как показано ниже:

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

}

Вот как я получаю из mysql db:

    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, не найденных: http://localhost : 8000 / project / restaurant / search? Name = {n}

Могу ли я узнать здесь проблему?

PS В главном веселье router.Mount("/project/", restaurant.NewRouter(dm)) * c.

1 Ответ

0 голосов
/ 09 января 2020

Я не знаю 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)
}

...