У меня возникла проблема перейти к конкретному документу (в данном случае событию) с использованием горилл и mgo.Перейти к конкретному документу в MongoDB с помощью golang
Модель событий:
Id bson.ObjectId `bson:"_id,omitempty"`
Email string `bson:"user_email"`
Name string `bson:"name"`
Category string `bson:"category"`
Description string `bson:"description"`
Status string `bson:"status"`
Обработчик
func ViewEventHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
eventId := vars["eventId"]
session, err := mgo.Dial("mongodb://DATABASE_URL")
defer session.Close()
session.SetMode(mgo.Monotonic, true)
c := session.DB("DATABASE_NAME").C("event")
result := model.EventModel{}
// the following line is probably the problem
err = c.FindId(bson.ObjectIdHex(eventId)).One(&result)
if r.Method == "GET" {
t, _ := template.ParseFiles("templates/view/event.html");
t.Execute(w, result);
}
}
Gorilla маршрут в главном
router.HandleFunc("/event/view/{ eventId }/", handlers.ViewEventHandler)
The View (HTML)
<td><a href="/event/view/{{ .Id.Hex }}/">{{ .Name }}</a></td>
Ошибка
2016/01/30 22:06:01 http: panic serving 127.0.0.1:41254: Invalid input to ObjectIdHex: ""
То, что я хочу, чтобы перейти к маршруту/события/представления/Id и показать конкретную страницу события.
Мое предположение заключается в том, что, вероятно, существует проблема синтаксического анализа типа данных, но все же пробовал несколько способов и не удалось.
Показать код, используемый для создания маршрута горилл. Кроме того, чтобы предотвратить панику в ObjectIdHex, проверьте правильность ввода, вызвав https://godoc.org/gopkg.in/mgo.v2/bson#IsObjectIdHex. –
Я добавил маршрут гориллы. Я не совсем понимаю, где я должен проверить, есть ли для ObjectIdHex? –
Я помешал панике, но новая страница ничего не показывает о событии ... Кажется, данные с сервера потеряны. –