Slide 1

Slide 1 text

Introduction à

Slide 2

Slide 2 text

C'est quoi ce truc ? Plateforme en javascript Basé sur V8 développé par Google pour Chrome Programmation évenementielle I/O non bloquante HTTP 1.1 (connection persistante : websocket)

Slide 3

Slide 3 text

En gros c'est du javascript côté serveur

Slide 4

Slide 4 text

Et ça ressemble à quoi concrètement ?

Slide 5

Slide 5 text

Événementielle ? (Callback ?) function getSomething() { res1 = query("select * from blabla"); // 200ms res2 = wsGet("http://foo/something/else/1664") // 500ms res3 = readFile("data/a_file.xml") // 300ms } Temps d'exécution de la demande : 1000ms function getSomething() { db.query("select ...", function(res1) { // j'ai mon res1 // 200ms }); http.get("http://foo..", function(res2) { // j'ai mon res2 // 500ms }); fs.readFile("file.xml", function (err, res3) { // j'ai mon res3 // 300ms }); Temps d'exécution de la demande : 500ms

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

fs.readFile("parameters.json", function(err, data) { mysql.connect(data.mysql, function(mysqlDb)) { mongodb.connect(data.mongodb, function(mongoDb) { var s = http.createServer(function(req, res) { res.write("hello\n"); res.end("world\n"); }); s.listen(data.port); }); }); }); Attention ! CallbackHell

Slide 9

Slide 9 text

Créez des modules interne à votre projet // lib/mymodule.js module.exports = { foo: function(){ return 'bar'; } }; // app.js var myModule = require('. /lib/mymodule'); myModule.foo();

Slide 10

Slide 10 text

Modules inclus dans node.js fs, net, http, crypto, cluster, process, etc...

Slide 11

Slide 11 text

D'ailleurs, votre projet lui même est un module (package.json) { "name": "stylus" , "description": "Robust, expressive, and feature-rich CSS superset" , "version": "0.32.1" , "author": "TJ Holowaychuk " , "keywords": ["css", "parser", "style", "stylesheets", "jade", "language"] , "repository": "git://github.com/learnboost/stylus" , "main": "./index.js" , "engines": { "node": "*" } , "bin": { "stylus": "./bin/stylus" } , "scripts" : { "prepublish" : "npm prune", "test": "make test" } , "dependencies": { "cssom": "0.2.x" , "mkdirp": "0.3.x" , "debug": "*" } , "devDependencies": { "should": "*" , "mocha": "*" } }

Slide 12

Slide 12 text

NPM (http://npmjs.org) Gestionnaire de modules (et dépendances) npm install -G express npm install socket.io npm publish

Slide 13

Slide 13 text

Quelques modules tiers socket.io : facilite l'utilisation de websockets express : framework web jade : moteur de template (HTML) stylus : facilite l'écriture des CSS (equiv. SASS) async : facilite la gestion de réponses asynchrones i18n : internationalisation mongodb, redis, mysql, etc... backbone, underscore, etc... et 24648 autres (au 09/03/2013)

Slide 14

Slide 14 text

Outillage du nodeur IDE Webstorm (permet le debugging) (payant) 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 Hébergement : Heroku, Nojitsu, AppFog

Slide 15

Slide 15 text

Mais encore ? Communauté immense et dynamique (2nd repo github, modules npm, forums, sites, tutos etc...) En production chez des gros (linkedin, ebay...) En constante évolution (plusieurs releases stables par mois) ... Encore jeune

Slide 16

Slide 16 text

var talker = require(humantalker); var steve = talker.create({ twitter : "@kwiky", finalWords : "Avez vous des questions ?" }); var alwaysRespondBullshit = function(question) { return "Je ne me suis pas penché sur cette question..."; } steve.listenQuestions(alwaysRespondBullshit);