Sails : Framework MVC pour Node.js
26 Mars 2014 - Sup’Info Montparnasse - Sylvain PONTOREAU
Sommaire
1 - Rappel sur Node
2 - Solutions MVC pour Node.js
4 - Sails in action
3 - Présentation de Sails
5 - Conclusion
1 - Piqure de rappel sur…
… Node.js !
- Mono-Thread asynchrone piloté par event
- JavaScript (Harmony features)
- Google V...
2 - Les Stacks MVC …
… et leur popularité !
1.5k 2.4k
5.5k12k
Meteor
Kraken
3 - Présentation de …
… Sails.js !
- Conçu par et pour les développeurs
- Orienté application d’entreprise
- Affinité pour...
3 – Caractéristiques …
… techniques !
- Convention over Configuration
- Stack RoR Like
- Automatic Rest Back-end
- ORM ins...
3 – Qu’y a-t-il …
… dans le stack !
Waterline GruntWindson
4 - Sails in …
… action !
Installation
npm install sails -g
Créer un projet
sails new myNewProject
cd myNewProject
npm upd...
4 - Définition d’un …
… modèle !
sails generate person
Person.js :
module.exports = {
attributes : {
}
};
attributes: {
na...
4 – Configuration …
… des adapters Waterline !
npm install sails-mongo --save
config/adapter.js :
module.exports.adapters ...
4 – Automatic …
… Rest Backend !
Requête POST valide =>
{
"name" : "sylvain",
"age" : "30" ,
"birthDate" : “05/28/1983"
}
...
4 – Automatic …
… Rest Backend !
Requête GET =>
http://localhost:1337/Person
Response :
[
{ "name": "sylvain", "age": 30,
...
4 - Socket.io …
… inside !
Test dans chrome :
4 - Création d’un contrôleur
… et ses actions !
PersonController.js :
module.exports = {
_config: {}
};
module.exports = {...
4 - Les vues …
… avec EJS !
views/layout.ejs :
<!DOCTYPE html>
<html>
<head>
<title><%- title %></title>
<meta name="viewp...
4 – Policies …
… et contrôle des accès !
api/policies/isAuthenticated.js :
module.exports = function(req, res, next) {
if ...
4 – Grunt …
… et l’asset bundling
gruntfile.js :
module.exports = function (grunt) {
grunt.initConfig({
concat : {
dist : ...
5 – Conclusion …
- Un Framework MVC efficace
- Nombreuses features out of the box
- ORM adaptable
- Développement de Backe...
Merci…
26 Mars 2014 - Sup’Info Montparnasse - Sylvain PONTOREAU
… à tous et bon pot !
Source disponible sur GitHub !
https...
Upcoming SlideShare
Loading in...5
×

Sails presentation by DCube at Sup'Info Paris (Montparnasse Tower)

396

Published on

Simple presentation of the MVC framework Sails.
Presentation made for Sup'Info Paris student (Montparnasse Tower)

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
396
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
1
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Sails presentation by DCube at Sup'Info Paris (Montparnasse Tower)

  1. 1. Sails : Framework MVC pour Node.js 26 Mars 2014 - Sup’Info Montparnasse - Sylvain PONTOREAU
  2. 2. Sommaire 1 - Rappel sur Node 2 - Solutions MVC pour Node.js 4 - Sails in action 3 - Présentation de Sails 5 - Conclusion
  3. 3. 1 - Piqure de rappel sur… … Node.js ! - Mono-Thread asynchrone piloté par event - JavaScript (Harmony features) - Google V8 - Module HTTP - Node Package Module
  4. 4. 2 - Les Stacks MVC … … et leur popularité ! 1.5k 2.4k 5.5k12k Meteor Kraken
  5. 5. 3 - Présentation de … … Sails.js ! - Conçu par et pour les développeurs - Orienté application d’entreprise - Affinité pour les données - Inspiré par Ruby on Rails - Idéal pour les applications temps réel
  6. 6. 3 – Caractéristiques … … techniques ! - Convention over Configuration - Stack RoR Like - Automatic Rest Back-end - ORM inside (Waterline) - Database Adapter - Action sur requête HTTP et WebSocket - Gestion des accès - Asset bundling - Sails CLI
  7. 7. 3 – Qu’y a-t-il … … dans le stack ! Waterline GruntWindson
  8. 8. 4 - Sails in … … action ! Installation npm install sails -g Créer un projet sails new myNewProject cd myNewProject npm update Lancer l’application sails lift
  9. 9. 4 - Définition d’un … … modèle ! sails generate person Person.js : module.exports = { attributes : { } }; attributes: { name : 'STRING', age : { type : 'INTEGER', required : true }, birthDate : 'DATE' } Types disponibles : string, text, integer, float, date, time, datetime, boolean, binary, array, json Validateurs disponibles : empty, required, email, url, ip, notNull, regex, contains, minLength, maxLength …
  10. 10. 4 – Configuration … … des adapters Waterline ! npm install sails-mongo --save config/adapter.js : module.exports.adapters = { default : 'mongo', mongo : { module : 'sails-mongo', host : 'localhost', port : 27017, user : 'username', password : 'password', database : 'Person' } };
  11. 11. 4 – Automatic … … Rest Backend ! Requête POST valide => { "name" : "sylvain", "age" : "30" , "birthDate" : “05/28/1983" } Response : { "name": "sylvain", "age": 30, "birthDate": "05/28/1983", "createdAt": "2014-03-24T10:11:46.358Z", "updatedAt": "2014-03-24T10:11:46.358Z", "id": "533004e24510daf41d7de305" } Requête POST non valide => { "name" : "sylvain", "age" : “30" , "birthDate" : “pasundate" } Response : { "status": 500, "errors": [{ "ValidationError": { "birthDate": [ { "data": "pasundate", "message": "Validation error: "pasundate" is not of type "date"", "rule": "date" }] } } ] }
  12. 12. 4 – Automatic … … Rest Backend ! Requête GET => http://localhost:1337/Person Response : [ { "name": "sylvain", "age": 30, "birthDate": "05/28/1983", "createdAt": "2014-03-24T10:11:46.358Z", "updatedAt": "2014-03-24T10:11:46.358Z", "id": "533004e24510daf41d7de305" }, { "name": "bill", "age": 58, "birthDate": "10/28/1955", "createdAt": "2014-03-24T10:29:45.131Z", "updatedAt": "2014-03-24T10:29:45.131Z", "id": "533009194510daf41d7de306" }, … ] Requête GET => http://localhost:1337/Person?name=sylvain Response : { "name": "sylvain", "age": 30, "birthDate": "05/28/1983", "createdAt": "2014-03-24T10:11:46.358Z", "updatedAt": "2014-03-24T10:11:46.358Z", "id": "533004e24510daf41d7de305" }
  13. 13. 4 - Socket.io … … inside ! Test dans chrome :
  14. 14. 4 - Création d’un contrôleur … et ses actions ! PersonController.js : module.exports = { _config: {} }; module.exports = { getAll : function(req, res){ Person.find().exec(function(err, data){ res.render('person/getAll', {persons : data}) }); }, _config: {} }; config/routes.js : module.exports.routes = { '/': { view: 'home/index' }, '/persons' : { controller : 'PersonController', action : 'getAll' } }; sails generate person
  15. 15. 4 - Les vues … … avec EJS ! views/layout.ejs : <!DOCTYPE html> <html> <head> <title><%- title %></title> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" /> </head> <body> <%- body %> <script type="text/javascript" src="/js/socket.io.js"></script> <script type="text/javascript" src="/js/sails.io.js"></script> <script type="text/javascript" src="/js/app.js"></script> </body> </html> views/person/getAll.ejs : <ul> <% for(var i=0; i < persons.length; i++) {%> <li> <%= persons[i].name %> - <%= persons[i].age %> - <%= persons[i].birthDate %> </li> <% } %> </ul>
  16. 16. 4 – Policies … … et contrôle des accès ! api/policies/isAuthenticated.js : module.exports = function(req, res, next) { if (req.session.authenticated) { return next(); } return res.forbidden('You are not permitted to perform this action.'); }; config/policies.js : module.exports.policies = { //'*': true, PersonController: { '*': false, getAll : 'isAuthenticated', otherFunction : ['isAuthenticated', 'isAdmin'] } };
  17. 17. 4 – Grunt … … et l’asset bundling gruntfile.js : module.exports = function (grunt) { grunt.initConfig({ concat : { dist : { src : 'asserts/js/*.js', dest : 'asserts/js/myApp.js' } }, uglify : { dist : { src : '<%= concat.dist.dest %>', dest : 'public/js/myApp.min.js' } } }); … } gruntfile.js : grunt.loadNpmTasks('grunt-contrib-concat'); grunt.loadNpmTasks('grunt-contrib-concat'); grunt.registerTask('default', ['concat' , 'uglify' ]); grunt
  18. 18. 5 – Conclusion … - Un Framework MVC efficace - Nombreuses features out of the box - ORM adaptable - Développement de Backend in no time ! - Essayez le ! … le poulpe c’est bon, mangez en !
  19. 19. Merci… 26 Mars 2014 - Sup’Info Montparnasse - Sylvain PONTOREAU … à tous et bon pot ! Source disponible sur GitHub ! https://github.com/Vtek/SailsDCubeExemple
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×