index.jsendPoints/songs/ | |
---|---|
Songs Collection API Endpoint | var ObjectID = mongo.ObjectID;
(exports = module.exports = function(house, options){
|
This endpoint requires a data source | var ds = options.ds;
var col = options.collection;
|
This endpoint behavior is to handles requests | var handleReq = function(req, res, next) { |
The request path sans the matching route to this endpoint | var path = req.hasOwnProperty('urlRouted') ? req.urlRouted : req.url;
|
Helper method to query the data source and respsond with the results | var findQuery = function(query) {
ds.find(col, query, function(err, data){
if(err) {
house.log.err(err);
} else if(data) {
res.data(data);
} else {
house.log.err(new Error('no data from mongo'));
}
});
}
|
Attempt to see if the request path included a document id | var docId;
|
We'll accept id's after a slash, such as endpoint/documentId | if(path.length > 1 && path.indexOf('/') === 0) {
var docId = path.substr(1);
docId = new ObjectID(docId);
}
|
GET requests | if(req.method == 'GET') {
var query = {};
if(docId) {
query._id = docId;
findQuery(query);
} else {
if(req.query) {
query = req.query;
|
query mongo id's | if(query.hasOwnProperty('id')) {
query._id = new ObjectID(query.id);
delete query.id;
}
|
querying against our search string | if(query.hasOwnProperty('ss')) {
var re = query.ss;
query.ss = {$regex: re, $options: 'gi'}; // var regex = new RegExp(re, "i");
}
}
findQuery(query);
} |
POST requests | } else if(req.method == 'POST') { |
Create new songs | if(path == '' && req.session.data.user) {
ds.insert(col, req.fields, function(err, data){
if(err) {
house.log.err(err);
res.end('error');
} else {
res.data(data);
}
});
}
} else if(req.method == 'PUT') {
var query = {};
if(docId && req.session.data.user) {
query._id = docId;
ds.update(col, query, req.fields, function(err, data){
if(err) {
house.log.err(err);
res.end('error');
} else {
house.log.debug(data);
res.data({});
}
});
}
} else if(req.method == 'DELETE') {
var query = {};
if(docId && req.session.data.user) {
query._id = docId;
ds.remove(col, query, function(err, data){
if(err) {
house.log.err(err);
res.end('error');
} else {
res.data(data);
}
});
}
} else if(req.method == 'OPTIONS') {
}
}
return handleReq;
});
|