Retour d'expérience MeteorJS
Retour d'expérience sur une application mobile avec site internet, back office. Le tout utilisant la caméra, et faisant du paiement en ligne.
Les applications web ré-inventées
(v 0.7.0.1)
Wouahou, j'ai trouvé un truc dans le navigateur, on va l'appeler WEB 2.0 !
Et,
curl https://install.meteor.com | /bin/sh
meteor create lyonJS && cd $_
meteor add bootstrap
meteor add accounts-base
meteor add accounts-ui
meteor add accounts-password
// et ou
meteor add accounts-facebook
meteor add accounts-twitter
meteor add accounts-github
meteor add accounts-google
meteor add accounts-meetup
meteor add accounts-weibo
npm install -g meteorite npm install -g yo npm install -g generator-meteor mkdir your-new-project && cd $_ yo meteor
[...]
meteor update && meteor
<body> {{> error}}
{{> list}} </body>
<template name="error"> {{getError}} </template>
<template name="list"> <h1>Votez pour un sujet</h1> {{loginButtons}} <ol id="listSubjects"> {{#each subjects}} <li>{{> subject}}</li> {{/each}}</ol>
{{#unless subjects}} Aucun sujet en cours.{{/unless}} </template>
if (Meteor.isClient) { // useless if code in client folder
Template.error.helpers({ getError: function () { return Session.get('error'); } });
}
Session.set('error','Arrgh erreur interne inconnue');
test sur http://lyonjs.meteor.com et la console
Au niveau online : DDP (Collections, Streams)
Subjects = new Meteor.Collection('my-subjects');
Subjects.insert({label: "LyonJS like Meteor"});
Subjects = new Meteor.Collection('my-subjects');
Subjects.insert({label: "LyonJS like Meteor"});
Subjects.update(myId, {$set: {aNewField: itsValue}});
Subjects.remove({_id: oneId});
Subjects.find().forEach(function(item) {console.log(item);});
Template.list.events({
'focus #fldNewSubject' : function funcCleanEror() { Session.set('error', ''); },
'click #btnNewSubject': function funcDisplayLog() {
Subjects.insert({label: whatEverYouWant});
}
);
Evénements disponibles:
focus, click, keyX, mouseX ... + selector
Meteor.methods({ rmSubject: function funcRmSubject(id) { var user = Meteor.user(), subject = Subjects.findOne({_id: id}); if (this.isSimulation) console.log('client-side only');
if (!isAdmin()) return new Meteor.error(403, 'Suppression de sujet réservé aux admins.'); if (!subject) return new Meteor.error(404, 'Sujet non trouvé, suppression impossible'); return Subjects.remove(id);
} });
Et ce code peut être commun au client et serveur : gain de temps pour le controle de vos formulaires
// installation
sudo npm install -g laika
// nouvelle instance de MongoDb mongod --smallfiles --noprealloc --nojournal
// installer phantomJs
sudo npm install -g phantomjs
Pour déployer son application sur http://lyonjs.meteor.com
meteor deploy lyonjs
meteor bundle lft
npm install -g meteorite
parts install meteor
mrt remove insecure
// Et gérer la collection avec les méthodes Allow / Deny
mrt remove autopublish
mrt add iron-router
mkdir monApp/packages/lyonJS && cd $_
touch package.js smart.json lyonJS.js lyonJStests.js
cd monApp/packages/lyonJS
meteor test-packages ./
// remplacer les insert/delete/update client-side par :
Meteor.call('addSubject', [params]);
Meteor.call('rmSubject', [params]);
Meteor.call('voteUpSubject', [params]);
Meteor.call('voteDownSubject', [params]);
http://pegleg.it (recherche de film)
http://anonkun.com/
(livre interactif)
By Retour d'expérience MeteorJS
Following my first meteorJs talk, here is the next step, more technical (@deprecated, you should have a look at : http://slides.com/rebolon/meteorjs-first-walk-updated)
Retour d'expérience sur une application mobile avec site internet, back office. Le tout utilisant la caméra, et faisant du paiement en ligne.