Advertisement
BlueBear

server.js

Jun 19th, 2014
297
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var http = require('http'),
  2.     express = require('express'),
  3.     path = require('path'),
  4.     MongoClient = require('mongodb').MongoClient,
  5.     Server = require('mongodb').Server,
  6.     CollectionDriver = require('./collectionDriver').CollectionDriver;
  7.  
  8. var app = express();
  9. app.set('port', process.env.PORT || 3000);
  10. app.set('views', path.join(__dirname, 'views')); //A
  11. app.set('view engine', 'jade'); //B
  12.  
  13. var mongoHost = 'localHost'; //A
  14. var mongoPort = 27017;
  15. var collectionDriver;
  16.  
  17. var mongoClient = new MongoClient(new Server(mongoHost, mongoPort)); //B
  18. mongoClient.open(function(err, mongoClient) { //C
  19.   if (!mongoClient) {
  20.       console.error("Error! Exiting... Must start MongoDB first");
  21.       process.exit(1); //D
  22.   }
  23.   var db = mongoClient.db("MyDatabase");  //E
  24.   collectionDriver = new CollectionDriver(db); //F
  25. });
  26.  
  27. app.use(express.bodyParser());
  28.  
  29. app.use(express.static(path.join(__dirname, 'public')));
  30.  
  31. app.get('/:collection', function(req, res) { //A
  32.    var params = req.params; //B
  33.    collectionDriver.findAll(req.params.collection, function(error, objs) { //C
  34.           if (error) { res.send(400, error); } //D
  35.           else {
  36.               if (req.accepts('html')) { //E
  37.                   res.render('data',{objects: objs, collection: req.params.collection}); //F
  38.               } else {
  39.               res.set('Content-Type','application/json'); //G
  40.                   res.send(200, objs); //H
  41.               }
  42.          }
  43.     });
  44. });
  45.  
  46. app.get('/:collection/:entity', function(req, res) { //I
  47.    var params = req.params;
  48.    var entity = params.entity;
  49.    var collection = params.collection;
  50.    if (entity) {
  51.        collectionDriver.get(collection, entity, function(error, objs) { //J
  52.           if (error) { res.send(400, error); }
  53.           else { res.send(200, objs); } //K
  54.        });
  55.    } else {
  56.       res.send(400, {error: 'bad url', url: req.url});
  57.    }
  58. });
  59.  
  60. app.post('/:collection', function(req, res) { //A
  61.     var object = req.body;
  62.     var collection = req.params.collection;
  63.     collectionDriver.save(collection, object, function(err,docs) {
  64.           if (err) { res.send(400, err); }
  65.           else { res.send(201, docs); } //B
  66.      });
  67. });
  68.  
  69. app.put('/:collection/:entity', function(req, res) { //A
  70.     var params = req.params;
  71.     var entity = params.entity;
  72.     var collection = params.collection;
  73.     if (entity) {
  74.        collectionDriver.update(collection, req.body, entity, function(error, objs) { //B
  75.           if (error) { res.send(400, error); }
  76.           else { res.send(200, objs); } //C
  77.        });
  78.    } else {
  79.        var error = { "message" : "Cannot PUT a whole collection" };
  80.        res.send(400, error);
  81.    }
  82. });
  83.  
  84. app.delete('/:collection/:entity', function(req, res) { //A
  85.     var params = req.params;
  86.     var entity = params.entity;
  87.     var collection = params.collection;
  88.     if (entity) {
  89.        collectionDriver.delete(collection, entity, function(error, objs) { //B
  90.           if (error) { res.send(400, error); }
  91.           else { res.send(200, objs); } //C 200 b/c includes the original doc
  92.        });
  93.    } else {
  94.        var error = { "message" : "Cannot DELETE a whole collection" };
  95.        res.send(400, error);
  96.    }
  97. });
  98.  
  99. app.use(function (req,res) {
  100.     res.render('404', {url:req.url});
  101. });
  102.  
  103. http.createServer(app).listen(app.get('port'), function(){
  104.   console.log('Express server listening on port ' + app.get('port'));
  105. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement