SlideShare a Scribd company logo
1 of 58
Download to read offline
node.js for front-end
                                developers

                               Garann Means // garann.com

Saturday, October 1, 2011
Saturday, October 1, 2011
case you missed it
                     ⬢      about two years old
                     ⬢      web server
                     ⬢      V8 as a backend platform
                     ⬢      all evented everything
                     ⬢      write in JavaScript




Saturday, October 1, 2011
hello world




                                          http://nodejs.org

Saturday, October 1, 2011
great, but..



Saturday, October 1, 2011
things node is good at
                     ⬢      chat apps
                     ⬢      games
                     ⬢      prototyping




Saturday, October 1, 2011
also: websites.



Saturday, October 1, 2011
fat clients
                     ⬢      client managing state
                     ⬢      client-side copy of data
                     ⬢      server just provides persistence




Saturday, October 1, 2011
connecting to APIs
                     ⬢      minimal persistence needs on your own
                            server
                     ⬢      easily avoid cross-domain issues
                     ⬢      callbacks on the server instead of JSONP




Saturday, October 1, 2011
real-time
                     ⬢      great for collaborative apps
                     ⬢      everything’s evented
                     ⬢      pushing and polling feel more natural
                     ⬢      excellent tools and abstractions




Saturday, October 1, 2011
things servers do
                     ⬢      15 years of JavaScript
                            ⬢   anything you’d ever want to do in a
                                browser
                     ⬢      2 years of node
                            ⬢   anything you’d ever want to do on the
                                backend




Saturday, October 1, 2011
hello $$$




                                http://www.braintreepayments.com/docs/node
Saturday, October 1, 2011
the question you
                            should be asking is,
                                 “why not?”


Saturday, October 1, 2011
node out of the box
                     ⬢      http, https, URL and querystring tools
                     ⬢      file system tools
                     ⬢      basic debugging, console logging, REPL
                     ⬢      timers, setInterval, etc.
                     ⬢      events and custom events




Saturday, October 1, 2011
require(‘other stuff’);



Saturday, October 1, 2011
node modules
                // myModule.js

                var myModule = exports;

                myModule.add = function(num1, num2) {
                  return num1 + num2;
                }




Saturday, October 1, 2011
node modules
                // server.js

                var addition = require(“myModule”);

                console.log(addition.add(4,5));   // “9”




Saturday, October 1, 2011
node modules




Saturday, October 1, 2011
node modules
                     ⬢      http://search.npmjs.org

                     ⬢      github
                     ⬢      99% chance that what you want exists
                     ⬢      use caution!
                            ⬢   check for multiple use cases
                            ⬢   check whether it’s still maintained




Saturday, October 1, 2011
writing less and
                             doing more*

                               * for the back-end


Saturday, October 1, 2011
express




                                      http://expressjs.com

Saturday, October 1, 2011
express
                     ⬢      application framework
                     ⬢      simple default file structure
                            ⬢   setup as easy as “express”
                     ⬢      routing
                     ⬢      template rendering
                     ⬢      sessions




Saturday, October 1, 2011
rendering a page
                var app = require('express').createServer();

                app.configure(function(){
                 app.set('view engine', 'html');
                 app.register('.html', require('jqtpl').express);
                });




Saturday, October 1, 2011
rendering a page
                app.get('/',function(req, res) {
                	
                  if (req.session && req.session.uid) {
                	     return res.redirect('/user');
                	 }
                	 res.render('login');

                });



Saturday, October 1, 2011
easy routing
                app.get('/user/:name', function(req, res) {

                       res.render('user', {
                          username: req.params.name
                       });

                });




Saturday, October 1, 2011
easy sessions
                var express = require(' express '),
                 app = express.createServer(),
                 connect = require(' connect ');

                app.configure(function(){
                 app.use(express.bodyParser());
                 app.use(express.cookieParser());
                 app.use(express.session());
                });


Saturday, October 1, 2011
easy sessions
                app.post('/login',function(req, res) {
                	
                  req.session.uid = req.body.username;
                  res.redirect('/');

                });




Saturday, October 1, 2011
socket.io




                                        http://socket.io
Saturday, October 1, 2011
socket.io
                     ⬢      easy-as-pie async communication
                     ⬢      functions similar to EventEmitter
                            ⬢   emit:on :: publish:subscribe
                            ⬢   same for client or server
                     ⬢      advanced stuff: context, broadcast
                     ⬢      works like.. JavaScript!




Saturday, October 1, 2011
plays nice w/ express
                var express = require(' express '),
                 app = express.createServer(),
                 connect = require(' connect '),
                 io = require('socket.io').listen(app);

                io.sockets.on('connection', function(socket) {
                 ...
                });



Saturday, October 1, 2011
(or not)




                                       http://socket.io/#howtouse

Saturday, October 1, 2011
easy client setup
                <script src="/socket.io/socket.io.js"></script>

                <script>
                 var socket =
                  io.connect('http://localhost:1337');
                </script>




Saturday, October 1, 2011
publish events
                <input type=”text” id=”username” />
                <input type=”button” id=”btn” value=”log in” />
                <script>
                 ...
                 $(“#btn”).click(function() {
                   socket.emit(“login”, $(“#username”).val());
                 });
                </script>



Saturday, October 1, 2011
publish events
                socket.on(“login”, function (name) {

                   socket.set(“uid”, name, function () {
                      socket.emit(“loggedIn”,name);
                  });

                });




Saturday, October 1, 2011
subscribe to events
                socket.on(“bookmark”, function(data) {

                    socket.get(“uid”, function(err, uid) {
                     addBookmark(uid, data.page, data.title);
                     socket.emit(“bmarkSaved”, data);
                    });

                });



Saturday, October 1, 2011
subscribe to events
                <script>
                 ...
                 socket.on(“bmarkSaved”, function(data) {
                   var bmark =
                     new Bmark(data.page, data.name);
                   bmark.render();
                 });
                </script>



Saturday, October 1, 2011
oh yay.
                            more code to write.


Saturday, October 1, 2011
sharing code
                     ⬢      possibly the best part?
                     ⬢      template reuse
                     ⬢      object reuse
                     ⬢      mostly: convention and tool reuse
                            ⬢   pub/sub and callbacks
                            ⬢   underscore, even jQuery!
                            ⬢   backbone and friends



Saturday, October 1, 2011
templates
                     ⬢      does it require the DOM?
                     ⬢      does it require compilation?
                     ⬢      no + no == probably works for both client-
                            and server-side
                            ⬢   jQuery templates
                            ⬢   mustache
                            ⬢   and many more!



Saturday, October 1, 2011
objects




                             http://www.2ality.com/2011/08/universal-modules.html

Saturday, October 1, 2011
callbacks
                     ⬢      user events
                     ⬢      messages to the server
                     ⬢      responses to the client
                     ⬢      database operations
                     ⬢      calls to APIs
                     ⬢      everything!




Saturday, October 1, 2011
jQuery in node
                     ⬢      installs as easily as any other npm module
                     ⬢      gets its own dependencies (jsdom)
                     ⬢      DOM manipulation
                     ⬢      wait, what?




Saturday, October 1, 2011
jQuery in node
                     ⬢      if you have complex existing code that
                            depends on jQuery
                     ⬢      if you need to write a scraper
                     ⬢      if you need to dig through some HTML (e.g.
                            spidering)
                     ⬢      if you want to simulate user interaction




Saturday, October 1, 2011
underscore in node
                     ⬢      works awesome with jQuery
                     ⬢      works awesome with node!
                     ⬢      same utilities on both sides, same code
                     ⬢      if you don’t have a specific use case for
                            jQuery




Saturday, October 1, 2011
frameworks
                     ⬢      backbone
                            ⬢   http://andyet.net/blog/2011/feb/15/re-using-backbonejs-models-on-the-
                                server-with-node/

                     ⬢      spine
                            ⬢   http://maccman.github.com/spine.tutorials/node.html

                     ⬢      in theory, anything




Saturday, October 1, 2011
ok, but when
                            will it be ready?


Saturday, October 1, 2011
totes ready!




Saturday, October 1, 2011
ok, no, really.



Saturday, October 1, 2011
Saturday, October 1, 2011
Saturday, October 1, 2011
Saturday, October 1, 2011
Saturday, October 1, 2011
Saturday, October 1, 2011
Saturday, October 1, 2011
(your pet project)



Saturday, October 1, 2011
we’ve seen this before
           2011



           2007



           2004



           2000
                                                     server-side      client-side


           1996
              alert()       hotscripts   libraries   app frameworks     modern JS


Saturday, October 1, 2011
totes ready
                     ⬢      basic HTTP stuff is solid
                     ⬢      excellent tools already exist
                     ⬢      client-side work can be reused
                     ⬢      you know JavaScript
                     ⬢      you can make a web application. now.




Saturday, October 1, 2011
thanks!
                            @garannm / garann@gmail.com




Saturday, October 1, 2011

More Related Content

Viewers also liked

Tms、cms与运营
Tms、cms与运营Tms、cms与运营
Tms、cms与运营
zhifei
 
Developing with Cassandra
Developing with CassandraDeveloping with Cassandra
Developing with Cassandra
Sperasoft
 
Application Development with Apache Cassandra as a Service
Application Development with Apache Cassandra as a ServiceApplication Development with Apache Cassandra as a Service
Application Development with Apache Cassandra as a Service
WSO2
 
Synnex 2015 Line Card + Warehouses
Synnex  2015 Line Card + WarehousesSynnex  2015 Line Card + Warehouses
Synnex 2015 Line Card + Warehouses
Mary Armenta
 
Portfólio Empresas UPTEC 2013_EN
Portfólio Empresas UPTEC 2013_ENPortfólio Empresas UPTEC 2013_EN
Portfólio Empresas UPTEC 2013_EN
UPTEC
 
2_White Paper Electronic Meal Ordering
2_White Paper Electronic Meal Ordering2_White Paper Electronic Meal Ordering
2_White Paper Electronic Meal Ordering
Christopher Morgan
 
Kiosk+Solutions+issue+5
Kiosk+Solutions+issue+5Kiosk+Solutions+issue+5
Kiosk+Solutions+issue+5
Adrian Warne
 
Accenture Retail Clienteling Solution
Accenture Retail Clienteling SolutionAccenture Retail Clienteling Solution
Accenture Retail Clienteling Solution
Tarik Schmidt
 
Using Cassandra with your Web Application
Using Cassandra with your Web ApplicationUsing Cassandra with your Web Application
Using Cassandra with your Web Application
supertom
 

Viewers also liked (20)

Tms、cms与运营
Tms、cms与运营Tms、cms与运营
Tms、cms与运营
 
Developing with Cassandra
Developing with CassandraDeveloping with Cassandra
Developing with Cassandra
 
KillrChat: Building Your First Application in Apache Cassandra (English)
KillrChat: Building Your First Application in Apache Cassandra (English)KillrChat: Building Your First Application in Apache Cassandra (English)
KillrChat: Building Your First Application in Apache Cassandra (English)
 
Node.js and Cassandra
Node.js and CassandraNode.js and Cassandra
Node.js and Cassandra
 
Cassandra NodeJS driver & NodeJS Paris
Cassandra NodeJS driver & NodeJS ParisCassandra NodeJS driver & NodeJS Paris
Cassandra NodeJS driver & NodeJS Paris
 
Real-time Cassandra
Real-time CassandraReal-time Cassandra
Real-time Cassandra
 
Application Development with Apache Cassandra as a Service
Application Development with Apache Cassandra as a ServiceApplication Development with Apache Cassandra as a Service
Application Development with Apache Cassandra as a Service
 
The Deloitte CFO Survey 2015 Q1
The Deloitte CFO Survey 2015 Q1The Deloitte CFO Survey 2015 Q1
The Deloitte CFO Survey 2015 Q1
 
OmniCX-Datasheet
OmniCX-DatasheetOmniCX-Datasheet
OmniCX-Datasheet
 
Synnex 2015 Line Card + Warehouses
Synnex  2015 Line Card + WarehousesSynnex  2015 Line Card + Warehouses
Synnex 2015 Line Card + Warehouses
 
Portfólio Empresas UPTEC 2013_EN
Portfólio Empresas UPTEC 2013_ENPortfólio Empresas UPTEC 2013_EN
Portfólio Empresas UPTEC 2013_EN
 
2_White Paper Electronic Meal Ordering
2_White Paper Electronic Meal Ordering2_White Paper Electronic Meal Ordering
2_White Paper Electronic Meal Ordering
 
Kiosk+Solutions+issue+5
Kiosk+Solutions+issue+5Kiosk+Solutions+issue+5
Kiosk+Solutions+issue+5
 
Arbetslösheten i Svenskfinland i oktober 2014
Arbetslösheten i Svenskfinland i oktober 2014Arbetslösheten i Svenskfinland i oktober 2014
Arbetslösheten i Svenskfinland i oktober 2014
 
Surviving the new retail reality | Ard van Leeuwen | Kega
Surviving the new retail reality |  Ard van Leeuwen | KegaSurviving the new retail reality |  Ard van Leeuwen | Kega
Surviving the new retail reality | Ard van Leeuwen | Kega
 
RealityMine for ARF March 2015
RealityMine for ARF March 2015RealityMine for ARF March 2015
RealityMine for ARF March 2015
 
CSS3: A practical introduction (FT2010 talk)
CSS3: A practical introduction (FT2010 talk)CSS3: A practical introduction (FT2010 talk)
CSS3: A practical introduction (FT2010 talk)
 
Accenture Retail Clienteling Solution
Accenture Retail Clienteling SolutionAccenture Retail Clienteling Solution
Accenture Retail Clienteling Solution
 
Using Cassandra with your Web Application
Using Cassandra with your Web ApplicationUsing Cassandra with your Web Application
Using Cassandra with your Web Application
 
KWD Webranking Sweden 2012-2013
KWD Webranking Sweden 2012-2013 KWD Webranking Sweden 2012-2013
KWD Webranking Sweden 2012-2013
 

Similar to node.js for front-end developers

Conquistando el Servidor con Node.JS
Conquistando el Servidor con Node.JSConquistando el Servidor con Node.JS
Conquistando el Servidor con Node.JS
Caridy Patino
 
Practical Cloud Security
Practical Cloud SecurityPractical Cloud Security
Practical Cloud Security
Jason Chan
 
Contextual Plone Security SaaS & SOA
Contextual Plone Security SaaS & SOAContextual Plone Security SaaS & SOA
Contextual Plone Security SaaS & SOA
Ken Wasetis
 

Similar to node.js for front-end developers (20)

Caridy patino - node-js
Caridy patino - node-jsCaridy patino - node-js
Caridy patino - node-js
 
Conquistando el Servidor con Node.JS
Conquistando el Servidor con Node.JSConquistando el Servidor con Node.JS
Conquistando el Servidor con Node.JS
 
A Look at the Future of HTML5
A Look at the Future of HTML5A Look at the Future of HTML5
A Look at the Future of HTML5
 
Groke
GrokeGroke
Groke
 
The Fast, The Slow and the Lazy
The Fast, The Slow and the LazyThe Fast, The Slow and the Lazy
The Fast, The Slow and the Lazy
 
Community Code: The TouchForums App
Community Code: The TouchForums AppCommunity Code: The TouchForums App
Community Code: The TouchForums App
 
RunDeck
RunDeckRunDeck
RunDeck
 
Node at artsy
Node at artsyNode at artsy
Node at artsy
 
Community Code: Xero
Community Code: XeroCommunity Code: Xero
Community Code: Xero
 
Rendering Views in JavaScript - "The New Web Architecture"
Rendering Views in JavaScript - "The New Web Architecture"Rendering Views in JavaScript - "The New Web Architecture"
Rendering Views in JavaScript - "The New Web Architecture"
 
Javascript Views, Client-side or Server-side with NodeJS
Javascript Views, Client-side or Server-side with NodeJSJavascript Views, Client-side or Server-side with NodeJS
Javascript Views, Client-side or Server-side with NodeJS
 
3D in the Browser via WebGL: It's Go Time
3D in the Browser via WebGL: It's Go Time 3D in the Browser via WebGL: It's Go Time
3D in the Browser via WebGL: It's Go Time
 
Practical Cloud Security
Practical Cloud SecurityPractical Cloud Security
Practical Cloud Security
 
What's this NetKernel Thing Anyway?
What's this NetKernel Thing Anyway?What's this NetKernel Thing Anyway?
What's this NetKernel Thing Anyway?
 
Extreme Testing with Selenium - @hugs at Jenkins User Conference 2011
Extreme Testing with Selenium - @hugs at Jenkins User Conference 2011Extreme Testing with Selenium - @hugs at Jenkins User Conference 2011
Extreme Testing with Selenium - @hugs at Jenkins User Conference 2011
 
Introduction to Solr
Introduction to SolrIntroduction to Solr
Introduction to Solr
 
Contextual Plone Security SaaS & SOA
Contextual Plone Security SaaS & SOAContextual Plone Security SaaS & SOA
Contextual Plone Security SaaS & SOA
 
Javascript - How to avoid the bad parts
Javascript - How to avoid the bad partsJavascript - How to avoid the bad parts
Javascript - How to avoid the bad parts
 
High Availability Server Apps
High Availability Server AppsHigh Availability Server Apps
High Availability Server Apps
 
AppScale Talk at SBonRails
AppScale Talk at SBonRailsAppScale Talk at SBonRails
AppScale Talk at SBonRails
 

Recently uploaded

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 

Recently uploaded (20)

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 

node.js for front-end developers

  • 1. node.js for front-end developers Garann Means // garann.com Saturday, October 1, 2011
  • 3. case you missed it ⬢ about two years old ⬢ web server ⬢ V8 as a backend platform ⬢ all evented everything ⬢ write in JavaScript Saturday, October 1, 2011
  • 4. hello world http://nodejs.org Saturday, October 1, 2011
  • 6. things node is good at ⬢ chat apps ⬢ games ⬢ prototyping Saturday, October 1, 2011
  • 8. fat clients ⬢ client managing state ⬢ client-side copy of data ⬢ server just provides persistence Saturday, October 1, 2011
  • 9. connecting to APIs ⬢ minimal persistence needs on your own server ⬢ easily avoid cross-domain issues ⬢ callbacks on the server instead of JSONP Saturday, October 1, 2011
  • 10. real-time ⬢ great for collaborative apps ⬢ everything’s evented ⬢ pushing and polling feel more natural ⬢ excellent tools and abstractions Saturday, October 1, 2011
  • 11. things servers do ⬢ 15 years of JavaScript ⬢ anything you’d ever want to do in a browser ⬢ 2 years of node ⬢ anything you’d ever want to do on the backend Saturday, October 1, 2011
  • 12. hello $$$ http://www.braintreepayments.com/docs/node Saturday, October 1, 2011
  • 13. the question you should be asking is, “why not?” Saturday, October 1, 2011
  • 14. node out of the box ⬢ http, https, URL and querystring tools ⬢ file system tools ⬢ basic debugging, console logging, REPL ⬢ timers, setInterval, etc. ⬢ events and custom events Saturday, October 1, 2011
  • 16. node modules // myModule.js var myModule = exports; myModule.add = function(num1, num2) { return num1 + num2; } Saturday, October 1, 2011
  • 17. node modules // server.js var addition = require(“myModule”); console.log(addition.add(4,5)); // “9” Saturday, October 1, 2011
  • 19. node modules ⬢ http://search.npmjs.org ⬢ github ⬢ 99% chance that what you want exists ⬢ use caution! ⬢ check for multiple use cases ⬢ check whether it’s still maintained Saturday, October 1, 2011
  • 20. writing less and doing more* * for the back-end Saturday, October 1, 2011
  • 21. express http://expressjs.com Saturday, October 1, 2011
  • 22. express ⬢ application framework ⬢ simple default file structure ⬢ setup as easy as “express” ⬢ routing ⬢ template rendering ⬢ sessions Saturday, October 1, 2011
  • 23. rendering a page var app = require('express').createServer(); app.configure(function(){ app.set('view engine', 'html'); app.register('.html', require('jqtpl').express); }); Saturday, October 1, 2011
  • 24. rendering a page app.get('/',function(req, res) { if (req.session && req.session.uid) { return res.redirect('/user'); } res.render('login'); }); Saturday, October 1, 2011
  • 25. easy routing app.get('/user/:name', function(req, res) { res.render('user', { username: req.params.name }); }); Saturday, October 1, 2011
  • 26. easy sessions var express = require(' express '), app = express.createServer(), connect = require(' connect '); app.configure(function(){ app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(express.session()); }); Saturday, October 1, 2011
  • 27. easy sessions app.post('/login',function(req, res) { req.session.uid = req.body.username; res.redirect('/'); }); Saturday, October 1, 2011
  • 28. socket.io http://socket.io Saturday, October 1, 2011
  • 29. socket.io ⬢ easy-as-pie async communication ⬢ functions similar to EventEmitter ⬢ emit:on :: publish:subscribe ⬢ same for client or server ⬢ advanced stuff: context, broadcast ⬢ works like.. JavaScript! Saturday, October 1, 2011
  • 30. plays nice w/ express var express = require(' express '), app = express.createServer(), connect = require(' connect '), io = require('socket.io').listen(app); io.sockets.on('connection', function(socket) { ... }); Saturday, October 1, 2011
  • 31. (or not) http://socket.io/#howtouse Saturday, October 1, 2011
  • 32. easy client setup <script src="/socket.io/socket.io.js"></script> <script> var socket = io.connect('http://localhost:1337'); </script> Saturday, October 1, 2011
  • 33. publish events <input type=”text” id=”username” /> <input type=”button” id=”btn” value=”log in” /> <script> ... $(“#btn”).click(function() { socket.emit(“login”, $(“#username”).val()); }); </script> Saturday, October 1, 2011
  • 34. publish events socket.on(“login”, function (name) {    socket.set(“uid”, name, function () {       socket.emit(“loggedIn”,name); }); }); Saturday, October 1, 2011
  • 35. subscribe to events socket.on(“bookmark”, function(data) { socket.get(“uid”, function(err, uid) { addBookmark(uid, data.page, data.title); socket.emit(“bmarkSaved”, data); }); }); Saturday, October 1, 2011
  • 36. subscribe to events <script> ... socket.on(“bmarkSaved”, function(data) { var bmark = new Bmark(data.page, data.name); bmark.render(); }); </script> Saturday, October 1, 2011
  • 37. oh yay. more code to write. Saturday, October 1, 2011
  • 38. sharing code ⬢ possibly the best part? ⬢ template reuse ⬢ object reuse ⬢ mostly: convention and tool reuse ⬢ pub/sub and callbacks ⬢ underscore, even jQuery! ⬢ backbone and friends Saturday, October 1, 2011
  • 39. templates ⬢ does it require the DOM? ⬢ does it require compilation? ⬢ no + no == probably works for both client- and server-side ⬢ jQuery templates ⬢ mustache ⬢ and many more! Saturday, October 1, 2011
  • 40. objects http://www.2ality.com/2011/08/universal-modules.html Saturday, October 1, 2011
  • 41. callbacks ⬢ user events ⬢ messages to the server ⬢ responses to the client ⬢ database operations ⬢ calls to APIs ⬢ everything! Saturday, October 1, 2011
  • 42. jQuery in node ⬢ installs as easily as any other npm module ⬢ gets its own dependencies (jsdom) ⬢ DOM manipulation ⬢ wait, what? Saturday, October 1, 2011
  • 43. jQuery in node ⬢ if you have complex existing code that depends on jQuery ⬢ if you need to write a scraper ⬢ if you need to dig through some HTML (e.g. spidering) ⬢ if you want to simulate user interaction Saturday, October 1, 2011
  • 44. underscore in node ⬢ works awesome with jQuery ⬢ works awesome with node! ⬢ same utilities on both sides, same code ⬢ if you don’t have a specific use case for jQuery Saturday, October 1, 2011
  • 45. frameworks ⬢ backbone ⬢ http://andyet.net/blog/2011/feb/15/re-using-backbonejs-models-on-the- server-with-node/ ⬢ spine ⬢ http://maccman.github.com/spine.tutorials/node.html ⬢ in theory, anything Saturday, October 1, 2011
  • 46. ok, but when will it be ready? Saturday, October 1, 2011
  • 48. ok, no, really. Saturday, October 1, 2011
  • 55. (your pet project) Saturday, October 1, 2011
  • 56. we’ve seen this before 2011 2007 2004 2000 server-side client-side 1996 alert() hotscripts libraries app frameworks modern JS Saturday, October 1, 2011
  • 57. totes ready ⬢ basic HTTP stuff is solid ⬢ excellent tools already exist ⬢ client-side work can be reused ⬢ you know JavaScript ⬢ you can make a web application. now. Saturday, October 1, 2011
  • 58. thanks! @garannm / garann@gmail.com Saturday, October 1, 2011