2016-01-30 7 views
1

У меня возникла проблема перейти к конкретному документу (в данном случае событию) с использованием горилл и 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 и показать конкретную страницу события.

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

+0

Показать код, используемый для создания маршрута горилл. Кроме того, чтобы предотвратить панику в ObjectIdHex, проверьте правильность ввода, вызвав https://godoc.org/gopkg.in/mgo.v2/bson#IsObjectIdHex. –

+0

Я добавил маршрут гориллы. Я не совсем понимаю, где я должен проверить, есть ли для ObjectIdHex? –

+0

Я помешал панике, но новая страница ничего не показывает о событии ... Кажется, данные с сервера потеряны. –

ответ

1

Попробуйте удалить пробелы из вашего маршрутизатора как «EVENTID»! = «EVENTID»

router.HandleFunc("/event/view/{eventId}/", handlers.ViewEventHandler)