ember-mongoose
Mongoose ⇆ Ember-Data
Last updated 7 years ago by kelonye .
MIT · Original npm · Tarball · package.json
$ cnpm install ember-mongoose 
SYNC missed versions from official npm registry.

Expose mongoose models via an API compliant with the default Ember Rest Adapter

Install

$ npm install ember-mongoose
$ component install kelonye/ember-mongoose

Example

Server

To get started, suppose you have a model, Post:


// server/models/Post.js

module.exports = new mongoose.Schema(
  {
    title: String,
    content: String
  }, {
    versionKey: false
  }
);

To expose this model, via an API, first define the CRUD auth hooks as:

// server/api_hooks/pre/Post.js

exports.create = function(req, next){
  
  var err;
  
  if (!(req.isAuthenticated() && req.user)) { // assuming you're using passport.js
    err = new Error('not allowed to access this resource');
    err.status = 403;
  }

  console.log(req.body.post);

  next(err);

};

exports.read = function(req, next){
  next();
};

exports.update = function (req, next){ 
  var err = new Error('not allowed to access this resource');
  err.status = 403;
  next(err);
};

exports.remove = function (req, next){ 
  var err = new Error('not allowed to access this resource');
  err.status = 403;
  next(err);
};

You also need to specify the fields to expose as:

// server/api_fields/Post.js

module.exports = [
  'title',
  'content',
];

Finally, build and mount the API to your Express app:

var join = require('path').join;
var express = require('express');
var db = require('mongoose').createConnection('mongodb://localhost/test');
var em = require('ember-mongoose');
var app = express();

// build api

em()
  .models(db, join(__dirname, 'server/models'))
  .fields(join(__dirname, 'server/api_fields'))
  .hooks(join(__dirname, 'server/api_hooks'));
  .discover(app);

app.listen(3000);

With this, you can now access the Post resource e.g.:

$ curl http://localhost:3000/posts

$ curl
  -H "Content-Type: application/json"
  -X POST
  -d '"post": {{"title":"title","content":""}}'
  http://localhost:3000/posts

$ curl http://localhost:3000/posts/1

$ curl
  -H "Content-Type: application/json"
  -X PUT
  -d '"post": {{"title":"title","content":""}}'
  http://localhost:3000/posts/1

$ curl -X DELETE http://localhost:3000/posts/1

Client

On client side, assuming you're using component package manager, you can set your app's adapter as:


App.ApplicationAdapter = require('ember-mongoose');

or alternatively, use lib/client/index.js if not.

Finally, you can then use the Ember-Data store to perfom API calls, e.g.:


App.Post = DS.Model.extend({
  title: DS.attr('string'),
  content: DS.attr('string'),
});

// pass query to mongoose

var query = 
  conditions: {
    title: 'title'
  },
  options: {
    skip: 0, // start row
    limit: 10, // end row
    sort: {
      created_at: -1 // order by latest
    }
  }
};

this
  .store
  .find('post', query)
  .then(function(posts){
    console.log(posts);
  }, funntion(res){
    console.log(res.responseText);
  });

// create example

var record = {
  title: 'My First Post',
  content: '',
};

this
  .store
  .createRecord('post', record)
  .save()
  .then(function(post){
    console.log(post);
  }, funntion(res){
    console.log(res.responseText);
  });

Get query count

To only retrieve the number of documents in a query, passin the count option as:


var query = 
  conditions: {
    title: 'title'
  },
  options: {
    count: true
  }
};

this
  .store
  .find('post', query)
  .then(function(res){
    console.log(res.meta.count);
  }, funntion(res){
    console.log(res.responseText);
  });

For more usage example, see test/support

Test

$ make test

Similar

Current Tags

  • 2.11.0                                ...           latest (3 years ago)

35 Versions

  • 2.11.0                                ...           3 years ago
  • 2.5.1                                ...           4 years ago
  • 2.5.0                                ...           4 years ago
  • 0.3.5                                ...           4 years ago
  • 0.3.4                                ...           4 years ago
  • 0.3.3                                ...           4 years ago
  • 0.3.2                                ...           5 years ago
  • 0.3.1                                ...           5 years ago
  • 0.3.0                                ...           5 years ago
  • 0.2.7                                ...           5 years ago
  • 0.2.6                                ...           5 years ago
  • 0.2.5                                ...           5 years ago
  • 0.2.4                                ...           5 years ago
  • 0.2.3                                ...           5 years ago
  • 0.2.2                                ...           5 years ago
  • 0.2.1                                ...           5 years ago
  • 0.2.0                                ...           5 years ago
  • 0.1.9                                ...           5 years ago
  • 0.1.8                                ...           5 years ago
  • 0.1.7                                ...           6 years ago
  • 0.1.6                                ...           6 years ago
  • 0.1.5                                ...           6 years ago
  • 0.1.4                                ...           6 years ago
  • 0.1.3                                ...           6 years ago
  • 0.1.2                                ...           7 years ago
  • 0.1.1                                ...           7 years ago
  • 0.1.0                                ...           7 years ago
  • 0.0.9                                ...           7 years ago
  • 0.0.8                                ...           7 years ago
  • 0.0.7                                ...           7 years ago
  • 0.0.6                                ...           7 years ago
  • 0.0.4                                ...           7 years ago
  • 0.0.3                                ...           7 years ago
  • 0.0.2                                ...           7 years ago
  • 0.0.1                                ...           7 years ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 0
Last Day 0
Last Week 0
Last Month 2
Dependencies (4)
Dev Dependencies (6)
Dependents (0)
None

Copyright 2014 - 2016 © taobao.org |