I think that sailsjs is a great alternative. I forked the todo to use Mongo.
https://github.com/johntom/sailsjs-angularjs-bootstrap-example
HTH
John

On Friday, February 21, 2014 10:07:08 AM UTC-5, António Ramos wrote:
>
> Check deployd as a persistence api
>
> http://www.youtube.com/watch?v=I_Jq1BVj6D0
>
>
> Solved my headaches
>
>
> 2014-02-21 10:24 GMT+00:00 Toto RoToTo <[email protected] <javascript:>>
> :
>
>> Hello,
>>
>> I am developing an Creative Cloud Extension using AngularJS.   
>> During the first step, I was using mocked services to display datas. This 
>> was working great. 
>> For the next step, I wanted my extension to consume real RESTful web 
>> services. (Using $resrouce module). 
>>
>> So I created a NodeJS RESTful server, using Express and MongoDB as 
>> database provider. 
>>
>> *Here it is my NodeJS server configuration (BackEnd):* 
>>
>> var express = require('express'),
>>     fabrics = require('./routes/fabrics');
>>  
>> var app = express();
>>  //CORS middleware
>> var allowCrossDomain = function(req, res, next) {
>>     res.header('Access-Control-Allow-Origin', "*");
>>     res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
>>     res.header('Access-Control-Allow-Headers', 'Content-Type');
>>
>>     next();
>> }
>>
>> app.configure(function() {
>>     app.use(express.bodyParser());
>>     app.use(express.cookieParser());
>>     app.use(express.session({ secret: 'cool beans' }));
>>     app.use(express.methodOverride());
>>     app.use(allowCrossDomain);
>>     app.use(app.router);   
>>  app.use(express.static(__dirname + '/public'));
>> });
>>
>> app.get('/fabrics', fabrics.findAll);
>> app.get('/fabrics/:id', fabrics.findById);
>> app.post('/fabrics', fabrics.addFabric);
>> app.put('/fabrics/:id', fabrics.updateFabric);
>> app.delete('/fabrics/:id', fabrics.deleteFabric);
>>  
>> app.listen(8080);
>> console.log('Listening on port 8080...');
>>
>>
>> *Here it iis route.js: *
>>
>> var mongo = require('mongodb');
>>  
>> var Server = mongo.Server,
>>     Db = mongo.Db,
>>     BSON = mongo.BSONPure;
>>  
>> var server = new Server('localhost', 27017, {auto_reconnect: true});
>> db = new Db('fabricsdb', server);
>>  
>> db.open(function(err, db) {
>>     if(!err) {
>>         console.log("Connected to 'fabrics' database");
>>         db.createCollection('fabrics', {strict:true}, function(err, 
>> collection) {
>>             if (err) {
>>                 console.log("The 'fabrics' collection doesn't exist. 
>> Creating it with sample data...");
>>                 populateDB();
>>             }
>>         });
>>     }
>> });
>>  
>> exports.findById = function(req, res) {
>>     var id = req.params.id;
>>     console.log('Retrieving fabric: ' + id);
>>     db.collection('fabrics', function(err, collection) {
>>         //collection.findOne({'_id':new BSON.ObjectID(id)}, function(err, 
>> item) {
>>  collection.findOne({'id':id.toString()}, function(err, item) { 
>>             res.send(JSON.stringify(item));
>>         });
>>     });
>> };
>>  
>> exports.findAll = function(req, res) {
>>  console.log('Retrieving all fabric');
>>     db.collection('fabrics', function(err, collection) {
>>         collection.find().toArray(function(err, items) {
>>             res.send(JSON.stringify(items));
>>         });
>>     });
>> };
>>  
>> exports.addFabric = function(req, res) {
>>     var fabric = req.body;
>>     console.log('Adding fabric: ' + JSON.stringify(fabric));
>>     db.collection('fabrics', function(err, collection) {
>>         collection.insert(fabric, {safe:true}, function(err, result) {
>>             if (err) {
>>                 res.send({'error':'An error has occurred'});
>>             } else {
>>                 console.log('Success: ' + JSON.stringify(result[0]));
>>                 res.send(JSON.stringify(result[0]));
>>             }
>>         });
>>     });
>> }
>>  
>> exports.updateFabric = function(req, res) {
>>     var id = req.params.id;
>>     var fabric = req.body;
>>     console.log('Updating fabric: ' + id);
>>     console.log(JSON.stringify(fabric));
>>     db.collection('fabrics', function(err, collection) {
>>         collection.update({'_id':new BSON.ObjectID(id)}, fabric, 
>> {safe:true}, function(err, result) {
>>             if (err) {
>>                 console.log('Error updating fabric: ' + err);
>>                 res.send({'error':'An error has occurred'});
>>             } else {
>>                 console.log('' + result + ' document(s) updated');
>>                 res.send(JSON.stringify(fabric));
>>             }
>>         });
>>     });
>> }
>>  
>> exports.deleteFabric = function(req, res) {
>>     var id = req.params.id;
>>     console.log('Deleting fabric: ' + id);
>>     db.collection('fabrics', function(err, collection) {
>>         collection.remove({'_id':new BSON.ObjectID(id)}, {safe:true}, 
>> function(err, result) {
>>             if (err) {
>>                 res.send({'error':'An error has occurred - ' + err});
>>             } else {
>>                 console.log('' + result + ' document(s) deleted');
>>                 res.send(JSON.stringify(req.body));
>>             }
>>         });
>>     });
>> }
>>  
>>
>> /*--------------------------------------------------------------------------------------------------------------------*/
>> // Populate database with sample data -- Only used once: the first time 
>> the application is started.
>> // You'd typically not find this code in a real-life app, since the 
>> database would already exist.
>> var populateDB = function() {
>>  
>>     var printFabrics = [
>>         {
>>             "name": "art-deco",
>>             "id": "1",
>>             "comment": "art déco print",
>>             "url": "img/fabrics/print/art-deco.jpg"
>>         },
>>         {
>>             "name": "BlackHibiscus",
>>             "id": "2",
>>             "comment": "hibiscusprint",
>>             "url": "img/fabrics/print/BlackHibiscus.jpg"
>>         },
>>         {
>>             "name": "flowers",
>>             "id": "3",
>>             "comment": "flowersprint",
>>             "url": "img/fabrics/print/flowers.jpg"
>>         },       
>>         {
>>             "name": "military",
>>             "id": "5",
>>             "comment": "militaryprint",
>>             "url": "img/fabrics/print/military.jpg"
>>         },
>>         {
>>             "name": "paisley",
>>             "id": "6",
>>             "comment": "paisleyprint",
>>             "url": "img/fabrics/print/paisley.jpg"
>>         },
>>         {
>>             "name": "palominobrown",
>>             "id": "7",
>>             "comment": "brownpalominoprint",
>>             "url": "img/fabrics/print/Palomino_Brown.jpg"
>>         },
>>         {
>>             "name": "skull",
>>             "id": "8",
>>             "comment": "skullprint",
>>             "url": "img/fabrics/print/skull.jpg"
>>         },
>>         {
>>             "name": "skullbandana",
>>             "id": "9",
>>             "comment": "skullbandanaprint",
>>             "url": "img/fabrics/print/skullbandana.jpg"
>>         },
>>         {
>>             "name": "coloredskull",
>>             "id": "10",
>>             "comment": "coloredskullprint",
>>             "url": "img/fabrics/print/skull-color.jpg"
>>         },
>>         {
>>             "name": "stars",
>>             "id": "11",
>>             "comment": "starsprint",
>>             "url": "img/fabrics/print/stars.jpg"
>>         },
>>         {
>>             "name": "tetris",
>>             "id": "12",
>>             "comment": "tetrisprint",
>>             "url": "img/fabrics/print/Tetris.jpg"
>>         },
>>         {
>>             "name": "coloredzigzag",
>>             "id": "13",
>>             "comment": "coloredzigzagprint",
>>             "url": "img/fabrics/print/zigzag-color.jpg"
>>         },
>>         {
>>             "name": "pinkzigzag",
>>             "id": "14",
>>             "comment": "pinkzigzagprint",
>>             "url": "img/fabrics/print/zigzag-pink.jpg"
>>         }
>>     ];
>>  
>>     db.collection('fabrics', function(err, collection) {
>>         collection.insert(printFabrics, {safe:true}, function(err, 
>> result) {});
>>     });
>>  
>> };
>>
>> *In my Extension (FrontEnd), this is how I try to consume the rest 
>> service: *
>>
>> *Service*: 
>>
>> var printFabricsServices = angular.module('printFabricsServices',
>>  ['ngResource']);
>>
>>
>> printFabricsServices.factory('restListService', [ '$resource', 
>> function($resource) { 
>>  return $resource('http://toto:8080/fabrics',{}, {
>> query : {
>>  method : 'GET',
>>         isArray: true
>> }
>>  });
>> } ]);
>>
>>
>> *Controller:*
>>
>> var controllers = angular.module('printFabricControllers', []);
>>
>> controllers.controller('printFabricsListController', [ 
>>         '$scope',
>>  'restListService', 
>> function($scope, restListService) {
>>                
>> $scope.printFabrics = []; 
>>  $scope.layout = 'grid';
>>  //Using Rest
>> $scope.getPrintFabricsUsingRest = function(){
>>  console.log('using rest service');
>> $scope.printFabrics = restListService.query(); 
>>  }; 
>> } ]);
>>
>>
>> *And my application module definition:*
>>
>>
>> var myApp = angular.module('myApp', [ 
>>      'ngRoute',      
>>      'printFabricControllers',
>>      'printFabricsServices'
>>   ]);
>>
>> myApp.config([ '$routeProvider', '$httpProvider', 
>> function($routeProvider, $httpProvider) { 
>>  // header stuff
>> $httpProvider.defaults.useXDomain = true;
>>
>> $routeProvider.when('/printFabrics', {
>> templateUrl : 'partials/printFabricsList.html',
>>  controller : 'printFabricsListController'
>> }).when('/printFabrics/:id', {
>> templateUrl : 'partials/printFabricsDetail.html',
>>  controller : 'printFabricDetailController'
>> }).otherwise({
>> redirectTo : '/printFabrics'
>>  });
>> } ]);
>>
>>
>>
>> Something should be wrong with what I have done. Request sent. But I do 
>> not know if it is correctly formatted (headers?). 
>> Request never received by my RESTFul server. 
>>
>> Any ideas about what is going wrong? 
>> Any help would be appreciated.
>>
>> Thx,
>> Thomas.
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>  -- 
>> You received this message because you are subscribed to the Google Groups 
>> "AngularJS" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected]<javascript:>
>> .
>> Visit this group at http://groups.google.com/group/angular.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/angular.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to