使用golang转到MongoDB中的特定文档

时间:2016-01-30 21:09:02

标签: mongodb go mgo gorilla

使用gorilla和mgo访问特定文档(在本例中为事件)时遇到问题。

活动模型:

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);
  }
}

主要的路线

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

视图(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: ""

我想要的是转到路线/事件/视图/身份证并显示事件的特定页面。

我的猜测是,可能存在数据类型解析问题,但仍尝试了几种方法并失败。

1 个答案:

答案 0 :(得分:1)

尝试从路由器中删除空格&#34; eventId&#34; !=&#34; eventId&#34;

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