Your SlideShare is downloading. ×
0
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Intro to node.js web apps
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Intro to node.js web apps

418

Published on

An introduction to node.js web applications, best suited for people just entering the world of node.js

An introduction to node.js web applications, best suited for people just entering the world of node.js

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
418
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Intro to node.js Web Apps #SKGNode
  • 2. #SKGNode Core Concepts
  • 3. #SKGNode Why Node? ● Asynchronous ● Robust ● Blazingly FAST ● Javascript / Browserify ● Largest growth year over year ● Largest frontend tool belt
  • 4. #SKGNode Philosophy ● No Frameworks ● Small reusable libraries ● NPM ● Open Source
  • 5. #SKGNode A Typical Node Web App Your AppCore HTTP ExpressJS
  • 6. #SKGNode Quick Start var express = require('express'); var app = express(); app.get('/', function(req, res){ res.send('Hello World'); }); app.listen(3000);
  • 7. #SKGNode Every Callback is a Middleware Middleware
  • 8. #SKGNode Anatomy of a Middleware app.get(‘/’, function(req, res, next) {/*.. */}); Request Object Response Object Pass Control
  • 9. #SKGNode The Request Object ● Instantiates per request ● Carries all request information ○ Headers ■ Cookies ○ Request route ○ Parameters (/user/:id), Body, Query ● Propagates Information (i.e. session, auth)
  • 10. #SKGNode The Response Object ● Instantiates per request ● Carries all respond methods ● Can be build iteratively (CORS, HTTP Code) ● Can terminate a Request ○ .render(), .send(), .end() ○ No ‘next()’ invocation is required
  • 11. #SKGNode The Flow Control next() ● Express depends on Middleware arity ● If omitted the middleware is Synchronous ● If truthy value is passed fails the request ○ next(‘no go’); ● Invoke once -and only once- to go to next ● If middleware is Terminal do not include it (i.e. final controller call that renders)
  • 12. #SKGNode The final route will never be reached! app.use(express.static(__dirname + '/public')); app.use(logger()); app.use(function(req, res){ res.send('Hello'); }); app.get(‘/’, function(req, res){ res.send('World'); }); Sequence MATTERS Static assets will get served without generating a Log
  • 13. #SKGNode Working with Middleware
  • 14. #SKGNode Augmenting the Request app.use(function(req, res, next) { redis.get(req.cookies.id, function(err, result) { if (err) { // bail out next(err); return; } req.user = result; // augmentation next(); }); });
  • 15. #SKGNode // Protect an auth only route app.get(‘/profile’, function(req, res, next) { if (!req.user) { res.status(401).send(‘No go dude’); return; // .send() is a terminal action // no need to call next }); next(); // Client is authed, go on... }); Leveraging Augmentation
  • 16. #SKGNode Express maintained Middleware ● body-parser ● compression ● cookie-parser ● csurf (CSRF) ● errorhandler ● express-session https://github.com/senchalabs/connect#middleware
  • 17. #SKGNode Routing
  • 18. #SKGNode HTTP Verbs ● app.use(fn) Catches all! ● app.all(route, fn) Catches all! ● app.get(route, fn) ● app.put(route, fn) ● app.post(route, fn) ● app.delete(route, fn) ● app.head(route, fn)
  • 19. #SKGNode app.get([string|Regex], [Function|Array], ...args) app.get(‘/’, showFrontPage); app.get(‘/’, fn1, fn2); app.get(‘/’, [fn1, fn2]); HTTP Verb Syntax
  • 20. #SKGNode Routing Options RegEx /^/commits/ (w+)/ “/commits/sdjeo34” → req.params[0] === ‘sdjeo34’ Plain String ‘/’ Triggers on “/”, “/?id=12”, etc Parametric String ‘/user/:id’ Triggers on “/user/thanpolas” → req.params.id === ‘thanpolas’ Multi Parametric String ‘/user/:network/:id’ Triggers on “/user/skgNode/thanpolas” → req.params.network Catch All ‘/api/*’ Catches all routes under “/api/”
  • 21. #SKGNode Routing Best Practices ● Routing is where the buck stops at ● Decouple your routes from your core app ● Study the app.route() pattern ● At the end, there can only be a 404
  • 22. #SKGNode Views
  • 23. #SKGNode Defining Paths & Engine app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); Check out all available template engines: https://github.com/visionmedia/express/wiki#template-engines
  • 24. #SKGNode Rendering a View /* GET home page. */ router.get('/', function(req, res) { // no next required res.render('index', { title: ‘SKGNode’ }); }); extends layout block content h1= title p Welcome to #{title}
  • 25. Thank you! Thanasis Polychronakis @thanpolas thanpolas@gmail.com #SKGNode
  • 26. Questions? Thanasis Polychronakis @thanpolas thanpolas@gmail.com #SKGNode

×