Documentation ¶
Overview ¶
Package mongo is a REST Layer resource storage handler for MongoDB using mgo
Example ¶
package main import ( "log" "net/http" "github.com/rs/cors" "github.com/rs/rest-layer-mongo" "github.com/rs/rest-layer/resource" "github.com/rs/rest-layer/rest" "github.com/rs/rest-layer/schema" "gopkg.in/mgo.v2" ) var ( user = schema.Schema{ Fields: schema.Fields{ "id": schema.IDField, "created": schema.CreatedField, "updated": schema.UpdatedField, "name": { Required: true, Filterable: true, Sortable: true, Validator: &schema.String{ MaxLen: 150, }, }, }, } // Define a post resource schema post = schema.Schema{ Fields: schema.Fields{ "id": schema.IDField, "created": schema.CreatedField, "updated": schema.UpdatedField, "user": { Required: true, Filterable: true, Validator: &schema.Reference{ Path: "users", }, }, "public": { Filterable: true, Validator: &schema.Bool{}, }, "meta": { Schema: &schema.Schema{ Fields: schema.Fields{ "title": { Required: true, Validator: &schema.String{ MaxLen: 150, }, }, "body": { Validator: &schema.String{ MaxLen: 100000, }, }, }, }, }, }, } ) func main() { session, err := mgo.Dial("") if err != nil { log.Fatalf("Can't connect to MongoDB: %s", err) } db := "test_rest_layer" index := resource.NewIndex() users := index.Bind("users", user, mongo.NewHandler(session, db, "users"), resource.Conf{ AllowedModes: resource.ReadWrite, }) users.Bind("posts", "user", post, mongo.NewHandler(session, db, "posts"), resource.Conf{ AllowedModes: resource.ReadWrite, }) api, err := rest.NewHandler(index) if err != nil { log.Fatalf("Invalid API configuration: %s", err) } http.Handle("/", cors.New(cors.Options{OptionsPassthrough: true}).Handler(api)) log.Print("Serving API on http://localhost:8080") if err := http.ListenAndServe(":8080", nil); err != nil { log.Fatal(err) } }
Output:
Index ¶
- Variables
- type Handler
- func (m *Handler) Clear(ctx context.Context, lookup *resource.Lookup) (int, error)
- func (m *Handler) Delete(ctx context.Context, item *resource.Item) error
- func (m *Handler) Find(ctx context.Context, lookup *resource.Lookup, page, perPage int) (*resource.ItemList, error)
- func (m *Handler) Insert(ctx context.Context, items []*resource.Item) error
- func (m *Handler) Update(ctx context.Context, item *resource.Item, original *resource.Item) error
- type ObjectID
Examples ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ( // NewObjectID is a field hook handler that generates a new Mongo ObjectID hex if // value is nil to be used in schema with OnInit. NewObjectID = func(ctx context.Context, value interface{}) interface{} { if value == nil { value = bson.NewObjectId().Hex() } return value } // ObjectIDField is a common schema field configuration that generate an Object ID // for new item id. ObjectIDField = schema.Field{ Required: true, ReadOnly: true, OnInit: NewObjectID, Filterable: true, Sortable: true, Validator: &ObjectID{}, } )
Functions ¶
This section is empty.
Types ¶
type Handler ¶
type Handler struct {
// contains filtered or unexported fields
}
Handler handles resource storage in a MongoDB collection.
func NewHandler ¶
NewHandler creates an new mongo handler
func (*Handler) Find ¶
func (m *Handler) Find(ctx context.Context, lookup *resource.Lookup, page, perPage int) (*resource.ItemList, error)
Find items from the mongo collection matching the provided lookup
Click to show internal directories.
Click to hide internal directories.