Node.js, le pavé dans la mare



Documents pareils
Principales caractéristiques

Développement d'applications Web HTML5 L'art et la manière avec Visual Studio 2015 et TFS

Point sur les solutions de développement d apps pour les périphériques mobiles

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Programmation Web. Madalina Croitoru IUT Montpellier

DA MOTA Anthony - Comparaison de technologies : PhoneGap VS Cordova

Auteur LARDOUX Guillaume Contact Année 2014 DEVELOPPEMENT MOBILE AVEC CORDOVA

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

DEVELOPPEMENT MOBILE - ETAT DE L ART DES SOLUTIONS

S7 Le top 10 des raisons d utiliser PHP pour moderniser votre existant IBM i

Développer des Applications Internet Riches (RIA) avec les API d ArcGIS Server. Sébastien Boutard Thomas David

Catalogue Formations Jalios

AngularJS pour une application d'entreprise

TD/TP 1 Introduction au SDK d Android

SharePoint 2013 Développez en.net pour personnaliser SharePoint (Apps, REST, CSOM et Azure)

les techniques d'extraction, les formulaires et intégration dans un site WEB

Un serveur web léger et ouvert

Offres de stages 2011/2012

HTML5. Développement d applications Web. Visual Studio 2015 et TFS. L art et la manière. avec. Philippe DIDIERGEORGES

Derrière toi Une machine virtuelle!

Journée IJD. Moussa Tari Bako Bachir. 25 juin 2012 ARLES/INRIA. Introduction Travail Chez ARLES

Installation et prise en main

1 JBoss Entreprise Middleware

Francis Mignault. ! Coauteur : Expert Oracle Application Express. ! Membre du Oracle APEX Advisory Board apex.oracle.com/vote

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

Méthode de Test. Pour WIKIROUTE. Rapport concernant les méthodes de tests à mettre en place pour assurer la fiabilité de notre projet annuel.

FusionInventory. Guillaume Rousse Journées francophones de Perl 2011

Cyrille GUERIN 823, place Soulanges Brossard, J4X1L8

Environnements de développement (intégrés)

NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

CHAPITRE 11. Temps réel Remy Sharp

Curriculum Vitae de Michel Casabianca

Le modèle client-serveur

THÉMATIQUES. Comprendre les frameworks productifs. Découvrir leurs usages. Synthèse

Architecture Orientée Service, JSON et API REST

Table des matières Introduction Démarrage Les composants graphiques... 26

Votre premier projet Android

AJAX. (Administrateur) (Dernière édition) Programme de formation. France, Belgique, Suisse, Roumanie - Canada

Alfstore workflow framework Spécification technique

PHP et le Cloud. All rights reserved. Zend Technologies, Inc.

Android 4 Les fondamentaux du développement d'applications Java

Gérer ses environnements de développement avec Vagrant RMLL 2012

2 Formation utilisateur

Content Management System V.3.0. BlackOffice CMS V3.0 by ultranoir 1

Technologies Web. Ludovic Denoyer Sylvain Lamprier Mohamed Amine Baazizi Gabriella Contardo Narcisse Nya. Université Pierre et Marie Curie

Java - la plateforme

Les grandes facettes du développement Web Nicolas Thouvenin - Stéphane Gully

Olivier Deheurles Ingénieur conception et développement.net

Soon_AdvancedCache. Module Magento SOON. Rédacteur. Relecture & validation technique. Historique des révisions

as Architecture des Systèmes d Information

ARCHITECTURE ET SYSTÈMES D'EXPLOITATIONS

Introduction à ElasticSearch

Armand PY-PATINEC 2010

Le cloud computing au service des applications cartographiques à haute disponibilité

Conférence SIG 2011 Versailles 5-6 Octobre 2011 Atelier Technique ArcGIS for Server en 10.1

Veille technologique

Ready to Go? [Retour d'expérience sur un projet en Golang] HTML PDF 1 / 44

Google Tag Manager v2 v1 dispo sur GTM pour les nuls dispo sur

DÉVELOPPER DES APPLICATIONS WEB SÉCURISÉES

Introduction aux Machines Virtuelles avec VMKit

Celui qui vous parle. Yann Vigara

Solution d inventaire automatisé d un parc informatique et de télédistribution OCS INVENTORY NG. EHRHARD Eric - Gestionnaire Parc Informatique

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

CQP Développeur Nouvelles Technologies (DNT)

GenDbg : un débogueur générique. Didier Eymery Jean-Marie Borello Jean-Marie Fraygefond Odile Eymery Philippe Bion

JOnAS Day 5.1. Outils de développements

Master1 ère année. Réseaux avancés I. TP nº5 filière ISICG

Le stockage local de données en HTML5

Atelier Progress Rollbase

Performance, rendement Vs Evolutivité

Environnements de développement (intégrés)


CNAM Déploiement d une application avec EC2 ( Cloud Amazon ) Auteur : Thierry Kauffmann Paris, Décembre 2010

Solution de Mobilité SAP SUP & AFARIA. Meltz Jérôme

Table des matières Avant-propos... V Scripting Windows, pour quoi faire?... 1 Dans quel contexte?

Introduction à. Oracle Application Express

EXTENSION de Microsoft Dynamics CRM Réf FR 80452

Eclipse atelier Java

MailStore Server 7 Caractéristiques techniques

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Vulgarisation Java EE Java EE, c est quoi?

Bureautique Initiation Excel-Powerpoint

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

L3 informatique TP n o 2 : Les applications réseau

Paris Airports - Web API Airports Path finding

COMPÉTENCES TECHNIQUES

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Twixl Portfolio DE INDESIGN VERS LES TABLETTES. Luk Dhondt - Product Manager

CATALOGUE DES OFFRES O2i INGÉNIERIE POUR LES PLATEFORMES ÉDITORIALES

Internet Information Services (versions 7 et 7.5) Installation, configuration et maintenance du serveur Web de Microsoft

Sommaire. Préface 1 : Pourquoi choisir Magento? Chapitre 1 : Magento, quésaco? Chapitre 2 : Quoi sous le capot?

Catalogue des formations 2014

Chapitre 1 Windows Server

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

Quel ENT pour Paris 5?

Technologies du Web. Créer et héberger un site Web. Pierre Senellart. Page 1 / 26 Licence de droits d usage

Transcription:

Node.js, le pavé dans la mare DekNOD v1.0.0

Un exemple, vite! http://tweetping.net/ 2

1. Présentation de Node

Qu'est-ce que Node Projet créé en 2009 par Ryan Dahl (Joyent Inc.) Basé sur le langage JavaScript Sur-couche de Chrome V8 Positionné côté serveur Piloté par les événements 4

GitHub : Node sur le podium 5

Ceux qui l'utilisent 6

Objectifs de Node Fournir une pile logicielle permettant : Aux développeurs web : JavaScript / navigateur De développer des serveurs Faciliter les fonctionnalités de push Proposer une API d'i/o suffisament bas niveau Privilégier les appels non bloquants 7

Chrome V8 Moteur JavaScript open source Utilisé dans les navigateurs (Google Chrome) Ou en standalone (Node) Compile le JavaScript en code natif Optimise à la volée : Inlining Cache Garbage collector 8

Architecture 9

Chaîne de traitement 10

2. Fonctionnalités

Gestionnaire de packages NPM NPM : Node Packages Modules Gère les dépendances d'une application Node Déclarées dans package.json Dépôt local dans node_modules/ (cf. NODE_PATH) Un peu comme Maven... npm install : télécharge les dépendances npm publish : publie un module dans le dépôt central Scopes : local au projet, ou global 12

Modèle asynchrone vs multi-thread 13

Modèle asynchrone - impacts dans le code // Synchrone function loaddata(id) { var data = store.find(id); return data; } var result = loaddata(3); console.log('result :', result); console.log('continue...'); // Asynchrone function loaddata(id, callback) { store.find(id, function(data) { callback(data); }); } loaddata(3, function(result) { console.log('result :', result); }); console.log('continue...'); 14

Synchrone moins gentil function managerequest(request) { var product, model, view, content; product = store.find(id); if (product === null) { content = renderer.render('notfound.html'); return content; } model = { id:product._id, name:product.name, price:product.price }; view = 'productdetail.html'; content = renderer.render(view, model); if (content === null) { return renderer.render('internalerror.html'); } return content; } response.write(managerequest(request)); 15

Asynchrone moins gentil function managerequest(request, callback) { var product, model, view, content; store.find(id, function (product, err) { if (err) { content = renderer.render('notfound.html', function (content) { callback(content); }); return; } model = { id:product._id, name:product.name, price:product.price }; view = 'productdetail.html'; content = renderer.render(view, model, function (content, err) { if (err) { renderer.render('internalerror.html', function (content) { callback(content); }); return; } callback(content); }); }); } managerequest(request, function (content) { response.write(content); }); 16

Because nothing blocks, less-than-expert programmers are able to develop fast systems nodejs.org/about 17

3. Modules standards

Net, Http Net permet d'agir au niveau socket En tant que serveur ou client Avec des méthodes de base Et des événements à écouter : connect, data, end, close Http : idem mais au niveau web S'appuie sur Net et l'interface générique EventEmitter Supporte SSL 19

Os, Process, Child process Os : informations relatives au système d'exploitation Type, plateforme, mémoire, cpus, interfaces réseaux Pas l'habitude d'avoir accès à ces infos Process : informations du processus Arguments, environnement, propriétaire, entrées sorties standards Child process : gestion de processus Exec, fork, spawn 20

Path, File System Path : outils pour travailler sur les chemins de fichiers var monfic = 'mondir/sousdir/name.ext' var monfic = path.join('mondir', 'sousdir', 'name.ext') File System : Opérations sur les fichiers : Lecture répertoire, suppression, écriture, information, liens symboliques APIs synchrones ou asynchrones 21

Modules Node fournit quelques variables globales module, process, mais pas window Et un mécanisme pour rendre les choses modulaires Inspiration pythonesque module.exports = { foo: function(){ return 'bar'; } }; /lib/mymodule.js var mymodule = require('./lib/mymodule'); mymodule.foo(); /app.js 22

4. Modules tiers

Les incontournables module async foreach, filter, map, log nombreux helpers pour la gestion asynchrone var async = require('async'); async.foreach(['a', 'b', 'c'], function (item, callback) { if (item === 'b') { callback(new Error('b forbidden')); } else { console.log(item); callback(); } }, function (err) { if (err) { console.log('error :', err); } else { console.log('done'); } }); Résultat : a Error : [Error: b forbidden] c Résultat avec foreachseries : a Error : [Error: b forbidden] 24

Asynchrone multi steps à la main step1(params, function (result) { step2(result, function () { step3(result, function () { step4(result, function () { fini(); }); }); }); }); 25

Asynchrone multi steps pattern / module Step step1(params, function (result) { var n = 0; var next = function () { n++; if (n === 3) { fini(); } }; step2(result, next); step3(result, next); step4(result, next); }); Step( function () { step1(params, this); }, function (result) { step2(result, this.parallel()); step3(result, this.parallel()); step4(result, this.parallel()); }, function () { fini(); } ); 26

Les incontournables module commander Pour exposer des commandes Plus pratique qu'une gestion avec process.argv commander.version(version).option('-f, --force', 'force on non-empty directory').option('-r, --refresh', 'refresh files')....parse(process.argv); apppath = commander.args.shift() process.cwd(); if (commander.force) { force();... } 27

Les incontournables module Express Framework pour application web Node : Minimaliste et flexible Basé sur le middleware connect Définition de routes sophistiquées Injection de moteur de rendu : jade, ejs, consolidate var express = require('express'); var app = express(); app.get('/hello.txt', function(req, res){ res.send('hello World'); }); app.listen(3000); 28

Les incontournables module i18n Module de traduction léger Stockage en json Facilité d'intégration avec Express var express = require('express'), i18n = require('i18n'); i18n.configure({ locales:['en', 'fr'], register: global }); app.locals({ : i18n., n: i18n. n }); app.configure(function() { app.use(i18n.init);... }); var welcome = ('Welcome'); <body> <h1><%= ('Welcome') %></h1> </body> 29

Les incontournables module mongoose API mongodb pour Node : Adaptée au côté asynchrone de Node Convient à de nombreuses situations : local, distant, cloud var mongoose = require('mongoose'), db = require('./db'); var contactdao = { entityname:'contact', schema:mongoose.schema({ firstname:{ type:string }, lastname:{ type:string }, phonenumber:{ type:string } }), getmodel:function () { return db.connection.model(contactdao.entityname, contactdao.schema) } }; 30

Simple db helper var mongoose = require('mongoose'), db = { connection:null, connect:function () { db.connection = mongoose.connect('mongodb://localhost:27017/db'); }, close:function () { if (db.connection!== null) { mongoose.disconnect(); db.connection = null; return true; } return false; } }; db.connect(); process.on('exit', function (code) { var result = db.close(); console.log('disconnecting db : ', result); }); 31

Les incontournables module socket.io Pour jouer avec les web sockets Modes dégradés pour les navigateurs Ajax, Adobe Flash Socket, iframe Facilité d'intégration avec Express var io = require('socket.io').listen(80); io.sockets.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); }); <script src="/socket.io/socket.io.js"></script> <script> var socket = io.connect('http://localhost'); socket.on('news', function (data) { console.log(data); socket.emit('my other event', { my: 'data' }); }); </script> serveur client 32

5. Développement JavaScript

IDE et debug La qualité de l'offre des IDEs est limitée Langage non typé, trop dynamique Eclipse : top avec Java, bof avec JS Faire sans : On se contente d'un éditeur (vi, textmate,...), parfois amélioré Faire avec : Le choix du moment : WebStorm (Jetbrains) Mode Debug (si vraiment nécessaire ) : En ligne de commande (à-la-gdb) Dans WebStorm : plus confortable 34

Monter en compétence sur JavaScript Résister aux tentations Se concentrer sur le meilleur Et sur le résultat obtenu JavaScript Koans : Inspiré de Ruby 35

6. Usine Logicielle

Les composantes essentielles d'une Usine Qualité du code : jslint, jshint Tests unitaires : mocha, qunit, jstd, jasmine, maven Couverture du code : jscoverage, coverjs Minifiers et autres compilateurs : less, coffee script,... Outil de build : grunt Solutions efficaces pour chaque besoin Pas toujours pour l'ensemble... 37

Déploiement & clouds Déployer une application Node : Cloud : En standalone Derrière un front Pourquoi pas un front Node... Heroku, Nojitsu, AppFog,... 38

7. Code Kata Web live chat

8. Exemples et retours d'expérience

Node en synthèse Node réinvente les roues des frameworks web Un environnement auto-suffisant et très typé Le JavaScript en réponse à tous les besoins 41

Node en synthèse (suite) Node impose un modèle non bloquant / mono thread : Adapté aux applications réseaux légères et rapides Solution de choix pour une application web : Dont la compléxité est surtout côté client Un éco-système très prolifique Mais jeune... 42

9. Questions / Réponses

Notre offre JavaScript Développement client avec JavaScript et Ajax réf. JASI 3 jours Développement JavaScript avancé réf. JAJA 2 jours Développer une application Web Full JavaScript réf. STAX 4 jours Programmer avec jquery réf. RESI 2 jours 44