forked from jspears/mers
-
Notifications
You must be signed in to change notification settings - Fork 0
/
rest.js
68 lines (64 loc) · 2.1 KB
/
rest.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
var factory = require('./transformer-factory'), streams = require('./streams'), _u = require('underscore');
function rest() {
var options = this;
// var router = require('express/router/route')
// root required
if (!options.mongoose) throw new Error('mongoose is required');
return {
__mounted:function (app) {
require('./routes')(this.route, app, options)
},
handle: function (req, res, next) {
res.contentType('json');
next();
// router.middleware(req, res, next);
},
set: function (base, path) {
options[base] = path;
},
emit:function(evt, app){
if (evt == 'mount'){
this.__mounted(app);
}
}
}
}
;
module.exports = function (options) {
var options = _u.extend({}, options);
if(options.conn) {
console.log('Using existing connection to mongodb://%s:%d/%s', options.conn.host, options.conn.port,
options.conn.name);
options.mongoose = options.conn.base;
}
else if(options.uri) {
if (!options.mongoose){
options.mongoose = require('mongoose');
console.warn("using mers mongoose do not mix mongoose versions");
}
options.conn = options.mongoose.createConnection(options.uri);
options.conn.on('error', console.error.bind(console, 'connection error:'));
options.conn.once('open', function () {
console.log("Successful connection to " + options.uri);
});
}
if (!options.mongoose){
throw new Error("No mongoose or uri defined");
}
if (!options.transformer)
options.transformer = new factory.TransformerFactory(options)
if (!options.responseStream)
options.responseStream = streams.BufferedJSONStream;
if (!options.error){
options.error = function(err, req, res, next){
res.send({
status:1,
error:err && err.message
});
}
}
options.streams = streams;
options.factory = factory;
options.rest = rest;
return options;
}