• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Introduction to Node.js: What, why and how?

Introduction to Node.js: What, why and how?



Talk given at NodeMTL #1

Talk given at NodeMTL #1



Total Views
Views on SlideShare
Embed Views



5 Embeds 11

http://www.techgig.com 4
http://graaasp.epfl.ch 3
https://twitter.com 2
http://twitter.com 1
http://graasp.epfl.ch 1



Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

    Introduction to Node.js: What, why and how? Introduction to Node.js: What, why and how? Presentation Transcript

    • Introduction to Node.js: What, why and how? Christian Joudrey - @cjoudrey
    • “Nodes goal is to provide an easy way to buildscalable network programs.”
    • What is node?• Command line tool to run JavaScript: $ node my_app.js• Built on top of Googles V8 JavaScript engine• Provides a JavaScript API for network and file system• Event-based, non-blocking I/O APIs
    • my_app.js: setTimeout(function () { console.log(world); }, 2000); console.log(hello);Running it: $ node my_app.js hello world
    • The cost of I/O?• Accessing RAM ~ 250 CPU cycles• Disk operations ~ 41 000 000 CPU cycles o Reading a file o Writing to a file• Network I/O ~ 240 000 000 CPU cycles o Database query responses o Http responses o Memcache results
    • • I/O is expensive• Most web applications are I/O bound, not CPU bound
    • Handling I/O• Apache is multithreaded (depending on conf.) o Spawns a thread per request (or process)• Each request is in its own "box", blocking I/O is "okay".result = query(SELECT * FROM ...);print result.id;
    • Thread-per-connection is expensivehttp://blog.webfaction.com/a-little-holiday-present
    • • nginx uses an event-loop, like node.
    • Enter node...• Single thread for your code• ...but, I/O runs in parallel• Handle thousands of concurrent connections with a single process• Need to be very careful with CPU-intensive code
    • I/O in node• No function should directly perform I/O.• To receive info from disk, network, or another process there must be a callback.• Callbacks are typically in the format: function (err, result) { }query(SELECT * FROM ..., function (err, result){ if (!err) { print result.id; }});
    • CommonJS Module Systemmymodule.js:module.exports.add = function (a, b) { return a + b;};Using the module:var mymodule = require(mymodule);console.log(mymodule.add(5, 2));
    • Built-in Modules• File System require(fs);• HTTP Client and Server require(http);• TCP Sockets require(net);• Many more: http://nodejs.org/docs/v0.4.8/api/
    • Getting Started• Node.js: http://nodejs.org/#download• Build instructions: http://bit.ly/egLfzu Mac: brew update && brew install node• npm, a package manager for Node: curl http://npmjs.org/install.sh | sh• Many modules at: http://search.npmjs.org/• Windows support isnt great (for the moment)
    • Reading a JSON File var fs = require(fs); var file = __dirname + /test.json; fs.readFile(file, utf8, function (err, data) { if (err) { console.log(Error: + err); return; } data = JSON.parse(data); console.dir(data); });https://gist.github.com/988107
    • Simple HTTP Server var http = require(http); var s = http.createServer(function (req, res) { var headers = {Content-Type: text/html}; req.writeHead(200, headers); res.end(<h1>hello world</h1>); }); s.listen(8080,;https://gist.github.com/988108
    • Express makes HTTP easier• Nodes HTTP module is low level.• Express is a simple framework inspired by Sinatra (Ruby).• Installing Express: npm install express && npm install jade• Robust verb-based routing o app.get(/about, function(req, res) { }); o app.post(/login, function(req, res) { });• Templating (with Jade or EJS)• Sessions
    • Getting Started with Express• Generate skeleton apps: express –help• Generate app with sessions and template engine: express --sessions --template jade hello/• Generated structure: $ ls hello/ app.js logs pids public test views $ ls hello/views/ index.jade layout.jade
    • Useful Modules• Express - Sinatra-like Web Framework http://expressjs.com npm install express• Jade - HAML-like Template Engine http://jade-lang.com npm install jade• Socket.IO - Cross-browser WebSocket library http://socket.io/ npm install socket.io
    • Interesting Links• Lots of Express examples: http://bit.ly/ExpressExamples• Express Documentation: http://bit.ly/ExpressDocs• NodeMTL.com Source Code: http://bit.ly/iZCjod• Database wrappers and ORMs: o Mongoose (MongoDB, ORM-like): https://github.com/LearnBoost/mongoose o Couch-ar (CouchDB, Active Record implementation): https://github.com/scottburch/couch-ar
    • Questions? :)