Created
March 14, 2014 09:48
-
-
Save liuzhe0223/9544951 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"github.com/codegangsta/martini" | |
"github.com/martini-contrib/binding" | |
"github.com/martini-contrib/encoder" | |
"labix.org/v2/mgo" | |
"labix.org/v2/mgo/bson" | |
"net/http" | |
"time" | |
) | |
type BlogPost struct { | |
Id bson.ObjectId `form:"-" json:"id" bson:"_id"` | |
Title string `form:"title" json:"title" bson:"title"` | |
Content string `form:"content" json:"content" bson:"content"` | |
Created_at time.Time `form:"-" bson:"created_at"` | |
} | |
func DB() martini.Handler { | |
session, err := mgo.Dial("mongodb://localhost") | |
if err != nil { | |
panic(err) | |
} | |
return func(c martini.Context) { | |
s := session.Clone() | |
c.Map(s.DB("an_domo")) | |
} | |
} | |
func main() { | |
m := martini.Classic() | |
m.Use(DB()) | |
m.Use(func(c martini.Context, w http.ResponseWriter) { | |
c.MapTo(encoder.JsonEncoder{}, (*encoder.Encoder)(nil)) | |
w.Header().Set("Content-Type", "application/json; charset=utf-8") | |
}) | |
m.Get("/posts", func(db *mgo.Database, enc encoder.Encoder) []byte { | |
var posts []BlogPost | |
db.C("test").Find(nil).All(&posts) | |
dataMap := make(map[string]interface{}) | |
dataMap["code"] = 0 | |
dataMap["posts"] = posts | |
return encoder.Must(enc.Encode(dataMap)) | |
}) | |
m.Get("/posts/:id", func(db *mgo.Database, params martini.Params, enc encoder.Encoder) []byte { | |
var blogPost BlogPost | |
db.C("test").Find(bson.M{"_id": bson.ObjectIdHex(params["id"])}).One(&blogPost) | |
dataMap := make(map[string]interface{}) | |
dataMap["code"] = 0 | |
dataMap["post"] = blogPost | |
return encoder.Must(enc.Encode(dataMap)) | |
}) | |
m.Post("/posts", binding.Json(BlogPost{}), func(db *mgo.Database, blogPost BlogPost, enc encoder.Encoder) []byte { | |
blogPost.Id = bson.NewObjectId() | |
db.C("test").Insert(blogPost) | |
return encoder.Must(enc.Encode(map[string]interface{}{"code": 0})) | |
}) | |
m.Put("/posts/:id", binding.Json(BlogPost{}), func(db *mgo.Database, params martini.Params, enc encoder.Encoder, blogPost BlogPost) []byte { | |
update_bson := bson.M{"title": blogPost.Title, "content": blogPost.Content} | |
select_bson := bson.M{"_id": bson.ObjectIdHex(params["id"])} | |
db.C("test").Update(select_bson, update_bson) | |
data := map[string]interface{}{"code": 0} | |
return encoder.Must(enc.Encode(data)) | |
}) | |
m.Delete("/posts/:id", func(db *mgo.Database, params martini.Params, enc encoder.Encoder) []byte { | |
select_bson := bson.M{"_id": bson.ObjectIdHex(params["id"])} | |
db.C("test").Remove(select_bson) | |
return encoder.Must(enc.Encode(map[string]interface{}{"code": 0})) | |
}) | |
m.Run() | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
👍