Do you write JavaScript? Congratulations, you're probably awesome at Node.js! While thinking about things from a server-side perspective might feel off-putting and unnatural, things like callbacks, storing data in JSON, and implementing actual websites probably do not. We'll go beyond getting Node installed and talk about how to quickly build a working web application, and demonstrate that Node can offer frontend developers more than just a new prototyping tool or way of creating endless chat servers.
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
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
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
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
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
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