SlideShare une entreprise Scribd logo
1  sur  58
Télécharger pour lire hors ligne
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

Contenu connexe

En vedette

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
 

En vedette (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
 

Similaire à 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
 

Similaire à 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
 

Dernier

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 

Dernier (20)

DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
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
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 

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