Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introduction à Node.js

Introduction à Node.js

Steve Grosbois

March 12, 2013
Tweet

More Decks by Steve Grosbois

Other Decks in Programming

Transcript

  1. 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)
  2. É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
  3. 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
  4. 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();
  5. 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 <[email protected]>" , "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": "*" } }
  6. 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)
  7. 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
  8. 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
  9. 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);