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


Published on

Talk given at NodeMTL #1

Published in: Technology
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

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

  1. 1. Introduction to Node.js: What, why and how? Christian Joudrey - @cjoudrey
  2. 2. “Nodes goal is to provide an easy way to buildscalable network programs.”
  3. 3. 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
  4. 4. my_app.js: setTimeout(function () { console.log(world); }, 2000); console.log(hello);Running it: $ node my_app.js hello world
  5. 5. 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
  6. 6. • I/O is expensive• Most web applications are I/O bound, not CPU bound
  7. 7. 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;
  8. 8. Thread-per-connection is expensive
  9. 9. • nginx uses an event-loop, like node.
  10. 10. 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
  11. 11. 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; }});
  12. 12. 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));
  13. 13. Built-in Modules• File System require(fs);• HTTP Client and Server require(http);• TCP Sockets require(net);• Many more:
  14. 14. Getting Started• Node.js:• Build instructions: Mac: brew update && brew install node• npm, a package manager for Node: curl | sh• Many modules at:• Windows support isnt great (for the moment)
  15. 15. 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); });
  16. 16. 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,;
  17. 17. 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, function(req, res) { });• Templating (with Jade or EJS)• Sessions
  18. 18. 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
  19. 19. Useful Modules• Express - Sinatra-like Web Framework npm install express• Jade - HAML-like Template Engine npm install jade• Socket.IO - Cross-browser WebSocket library npm install
  20. 20. Interesting Links• Lots of Express examples:• Express Documentation:• Source Code:• Database wrappers and ORMs: o Mongoose (MongoDB, ORM-like): o Couch-ar (CouchDB, Active Record implementation):
  21. 21. Questions? :)