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]>: > 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]. > 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. > -- 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.
