loopback/node_modules/collection/lib/collection.js

105 lines
1.9 KiB
JavaScript

/**
* Expose `Collection`.
*/
module.exports = Collection;
/**
* Module dependencies.
*/
var Resource = require('resource').Resource
, debug = require('debug')('collection')
, util = require('util')
, inherits = util.inherits
, assert = require('assert');
/**
* Create a new `Collection` with the given `options`.
*
* @param {Object} options
* @return {Collection}
*/
function Collection(options) {
Resource.apply(this, arguments);
this.options = options;
// collection middleware
this.app.use(function (req, res, next) {
req.asyncEmit('request', next);
});
// setup http routes
// this.setupRoutes(this.app);
debug('created with options', options);
}
/**
* Inherit from `Resource`.
*/
inherits(Collection, Resource);
/**
* Dependencies.
*/
Collection.dependencies = {
'store': 'store'
}
Collection.prototype.setupRoutes = function (app) {
var store = this.store;
var done = this.done;
var Model = this.store;
var emit = this.asyncEmit;
// create
app.post('/', create);
app.post('/new', create);
function create(req, res, next) {
req.asyncEmit('create', function () {
var o = store.save(req.body, res.done);
});
}
// read
app.get('/:id', query);
app.get('/', query);
function query(req, res, next) {
var query = req.query;
query.where = query.where || {};
if(req.param('id')) {
query.where.id = req.param('id');
}
if(query.where.id) {
query.limit = 1;
}
req.asyncEmit('query', query, function () {
store.all(query, res.done);
});
}
// update
app.put('/:id', function (req, res) {
req.asyncEmit('update', req.body, function () {
store.updateAttributes(req.body, res.done);
});
});
// delete
app.destroy('/:id', function () {
var id = req.param('id');
req.asyncEmit('delete', id, function () {
store.destroy(id, res.done);
});
});
}