SlideShare a Scribd company logo
this presentation code is on
https://github.com/gabrielelana/node-examples
gabriele lana
  gabriele.lana@cleancode.it
    twitter: @gabrielelana
         this presentation code is on
https://github.com/gabrielelana/node-examples
why
         node.js?

“Node's goal is to
  provide an easy
   way to build
scalable network
    programs”

           http://nodejs.org/#about
what is
                  node.js?
•   asynchronous i/o framework
•   core in c++ on top of v8
•   rest of it in javascript
•   swiss army knife for network
    related stuffs
•   can handle thousands of
    concurrent connections with
    minimal overhead (cpu/memory)
    on a single process
Single thread
synchronous I/0
Single thread
synchronous I/0
multiple thread
synchronous I/0
multiple thread
synchronous I/0
you can
  “always”
 scale with
  multiple
machines but
  it costs
  you $$$
but...
what is HE
 doing?
CPU BOUND
          TASKS?


  but...
what is HE
 doing?
CPU BOUND
          TASKS?

             ...OR I/o
  but...       BOUND
what is HE    TASKS?
 doing?
synchronous I/0

function
productsInCart(request,
response)
{




var
db
=
new
Db()




var
user
=
new
User(request)




if
(user.isAuthorized("cart/products"))
{








response.write(












JSON.stringify(
















db.productsInCart(user.cartId())












)








)




}
else
{








response.unauthorized()




}
}
synchronous I/0

function
productsInCart(request,
response)
{




var
db
=
new
Db()




var
user
=
new
User(request)




if
(user.isAuthorized("cart/products"))
{








response.write(












JSON.stringify(
















db.productsInCart(user.cartId())












)








)




}
else
{








response.unauthorized()




}
}
synchronous I/0

function
productsInCart(request,
response)
{




var
db
=
new
Db()




var
user
=
new
User(request)




if
(user.isAuthorized("cart/products"))
{








response.write(












JSON.stringify(
















db.productsInCart(user.cartId())












)








)




}
else
{








response.unauthorized()




}
}
synchronous I/0

function
productsInCart(request,
response)
{




var
db
=
new
Db()




var
user
=
new
User(request)




if
(user.isAuthorized("cart/products"))
{








response.write(












JSON.stringify(
















db.productsInCart(user.cartId())












)








)




}
else
{








response.unauthorized()




}
}
single thread
asynchronous I/0
single source events
  STATES




                      EVENTS
http://www.infoq.com/presentations/Death-by-Accidental-Complexity
single source events
 function
productsInCart(request,
response)
{
 



var
db
=
null,
user
=
null,
...
 



createDb()
 



handle(function(source,
event)
{
 







if
(event["name"]
===
"createDb")
{
 











if
(db
===
null)
{
 















db
=
event.data
 















createUser(request)
 











}
else
{
 















????
 











}
 







}
else
if
(event["name"]
===
"createUser")
{
 











if
(user
===
null)
{
 















user
=
event.data
 















...
 











}
else
{
 















???
 











}
 







...

 







}
else
{
 











source.push(event,
state)
 







}
 



},
"_initial")
 }
asynchronous I/0
  single thread
asynchronous I/0


           I am
       “callback”
         call me
         if you
        need me...
asynchronous I/0
  single thread
asynchronous I/0
multiple source events
     (local state)
STATES




         EVENTS
multiple source events
     (local state)
  function
productsInCart(request,
response)
{
  



createDb(function(db)
{
  







createUser(function(user)
{
  











if
(user.isAuthorized("cart/products")
{
  















response.write(
  



















JSON.stringify(
  























db.productsInCart(user.cartId())
  



















)
  















)
  















response.end()
  











})
else
{
  















response.unauthorized()
  











}
  







})
  



})
  }
multiple source events
     (local state)
  function
productsInCart(request,
response)
{
  



createDb(function(db)
{
  







createUser(function(user)
{
  











if
(user.isAuthorized("cart/products")
{
  















response.write(
  



















JSON.stringify(
  























db.productsInCart(user.cartId())
  



















)
  















)
  















response.end()
  











})
else
{
  















response.unauthorized()
  











}
  







})
  



})
  }
Event Emitter
                         (local state)
var
http
=
require("http")

var
server
=
http.createServer(function(request,
response)
{


response.writeHead(200,
{




"Content-Type":
"plain/text"


})


response.write("Hello
Worldn")


response.end()
})

server.listen(8080)

console.log(">
SERVER
STARTED")



                      01#hello_world/hello_world_server.js
Event Emitter
                         (local state)
var
http
=
require("http")

var
server
=
http.createServer(function(request,
response)
{


response.writeHead(200,
{




"Content-Type":
"plain/text"


})


response.write("Hello
Worldn")


response.end()
})

server.listen(8080)

console.log(">
SERVER
STARTED")



                      01#hello_world/hello_world_server.js
Event Emitter
                         (local state)
var
http
=
require("http")

var
server
=
http.createServer(function(request,
response)
{


response.writeHead(200,
{




"Content-Type":
"plain/text"


})


response.write("Hello
Worldn")


response.end()
})

server.listen(8080)

console.log(">
SERVER
STARTED")



                      01#hello_world/hello_world_server.js
Event Emitter
                         (local state)
var
http
=
require("http")

var
server
=
http.createServer(function(request,
response)
{


response.writeHead(200,
{




"Content-Type":
"plain/text"


})


response.write("Hello
Worldn")


response.end()
})

server.listen(8080)

console.log(">
SERVER
STARTED")



                      01#hello_world/hello_world_server.js
Event Emitter
                                (local state)
coder@apollo:~/Work/src/node/examples$ node hello_world_server.js
> SERVER STARTED
                                                                    #1
coder@apollo:~$ curl "http://localhost:8080/"
Hello World
                                                                    #2
Event Emitter
                         (local state)
var
server
=
require("http").createServer()

server.on("request",
function(request,
response)
{


console.log(">
REQUEST
STARTED")


request.on("end",
function()
{




console.log(">
REQUEST
CLOSED")




response.writeHead(200,
{






"Content-Type":
"plain/text"




})




response.end("Hello
Worldn")




server.close()


})


response.on("close",
function()
{




console.log(">
RESPONSE
CLOSED")


})
})

              01#hello_world/hello_world_server_emitter.js
Event Emitter
                         (local state)

...

server.on("close",
function()
{


console.log(">
SERVER
CLOSED")
})

server.on("listening",
function()
{


console.log(">
SERVER
STARTED")
})

server.listen(8080)




              01#hello_world/hello_world_server_emitter.js
Event Emitter
                                (local state)
coder@apollo:~/Work/src/node/examples$ node hello_world_server.js
> SERVER STARTED                                                    #1
coder@apollo:~$ curl "http://localhost:8080/"
Hello World                                                         #2
                                                                    #1
> REQUEST STARTED
> REQUEST CLOSED
> SERVER CLOSED
why so
complicated?
data streams
server.on("request",
function(request,
response)
{


var
chunks
=
[],






output
=
fs.createWriteStream("./output")



request.on("data",
function(chunk)
{




chunks
=
forEachLine(chunks.concat(chunk),
function(line)
{






output.write(parseInt(line,
10)
*
2)






output.write("n")




})


})



request.on("end",
function()
{




response.writeHead(200,
{
"Content-Type":
"plain/text"
})




response.end("OKn")




output.end()




server.close()


})
})
                               02#proxy_stream/proxy_stream.js
Event Emitter
                                (local state)
coder@apollo:~/Work/src/node/examples$ node stream_doubler.js
                                                                    #1
coder@apollo:~$ curl "http://localhost:8080/" --data $'1n2n3n'
OK                                                                  #2
coder@apollo:~/Work/src/node/examples$ cat output
2
4
6                                                                   #1
why
                 javascript?


•   Friendly callbacks
•   ubiquitous (well known)
•   no I/o primitives
•   one language to rule them all
web applications
                             before: a web
mind shift #1               server with some
                            application logic


                        application
           Web server
                        application


                        application


                        application
web applications
                        after: an application
mind shift #1             accessible over
                                http

        web server




                     application
web applications
                        after: an application
mind shift #1                 that can
                          communicate and
                         collaborate with
        web server
                             the world




                     application
web applications
                    before: stateful
mind shift #2   • no easy to scale
                • no easy to reuse

                v
                     M
                c
web applications
                    before: stateful
mind shift #2   • no easy to scale
                • no easy to reuse

                v
                     M
                c


  conversation       application
     state             state
web applications
                    before: stateful
mind shift #2   • no easy to scale
                • no easy to reuse

                v
                     M
                c



   tightly coupled
web applications
                    after: stateless
mind shift #2      • easy to scale
                   • easy to reuse


       v
            http
                       M
       c
web applications
                    after: stateless
mind shift #2      • easy to scale
                   • easy to reuse


       v
            http
                       M
       c


conversation       application
   state             state
web applications
                       after: stateless
mind shift #2
                http




                       web server
                                        M
                http

                                     statefull
                                    connection



• easy to scale                                  M
• easy to reuse
no fluff
just stuff
tic - tac - toe
tic - tac - toe



demo
INSTALL NPM
                                   (node packet manager)

coder@apollo:~/Work/src/node/examples$ curl http://npmjs.org/install.sh | sh
...
npm ok
It worked

coder@apollo:~/Work/src/node/examples$ npm list | wc -l
1776

coder@apollo:~/Work/src/node/examples$   npm   install   connect@0.2.5
coder@apollo:~/Work/src/node/examples$   npm   install   faye@0.5.3
coder@apollo:~/Work/src/node/examples$   npm   install   backbone@0.3.0
coder@apollo:~/Work/src/node/examples$   npm   install   underscore@1.1.2
static handler

var
server
=
connect.createServer(connect.logger({
"buffer":
true
}))


.use("/",
connect.router(function(resource)
{




resource.get("/board",
function(request,
response,
next)
{






request.url
=
"/board.html"






next()




})




...


}),
connect.staticProvider({





"root":
path.join(__dirname,
"static"),





"cache":
true



}))

server.listen(port)



                                             05#tictactoe/server.js
game handler
                           (generate board-id)






resource.post("/board",
function(request,
response)
{






response.writeHead(200,
{
"Content-Type":
"application/json"
})






uuid(function(boardId)
{








response.end(










JSON.stringify({












"board":
{
"id":
boardId
}










})








)






})




})




                                             05#tictactoe/server.js
game handler
                              (initial board/user)




resource.get("/board/:id",
function(request,
response)
{






var
board
=
boards.get(request.params["id"])






if
(board
===
undefined)
{








board
=
new
Board({
"id":
request.params["id"]
})








boards.add(board)






}






uuid(function(userId)
{








var
user
=
board.user(userId)








response.writeHead(200,
{
"Content-Type":
"application/json"
})








response.end(










JSON.stringify({












"board":
board,












"user":
user










})








)






})




})
                                                05#tictactoe/server.js
game handler
                                 (make your move)







resource.post("/board/:id",
function(request,
response)
{






waitForBody(request,
function(body)
{








boards.get(request.params["id"]).move(JSON.parse(body))








response.writeHead(204,
{
"Content-Type":
"application/json"
})








response.end(JSON.stringify({
"response":
"ok"
}))






})




})




                                                05#tictactoe/server.js
comet handler

var
comet
=
new
Faye.NodeAdapter({
"mount":
"/comet",
"timeout":
50
})

var
server
=
connect.createServer(connect.logger({
"buffer":
true
}))


.use("/comet",
function(request,
response,
next)
{




comet.handle(request,
response)


})


...
})

comet.attach(server)




                                              05#tictactoe/server.js
comet EVENTS
                       on backbone events



var
client
=
comet.getClient()
var
boards
=
new
Backbone.Collection

boards.bind("change",
function(board)
{


client.publish("/board-"
+
board.get("id"),
board)
})




                                         05#tictactoe/server.js
in browser
                                     routing

$(function()
{



$.sammy(function()
{









this.get("",
function(context)
{






$.post("/board",
function(response)
{








context.redirect("#/board/"
+
response["board"]["id"])






})




})





...


}).run()
})



                                  05#tictactoe/static/board.html
in browser
                                 routing/start game





var
comet
=
new
Faye.Client("/comet")




var
game
=
new
Game()





this.get("#/board/:id",
function(context)
{






game.start()






$.get("/board/"
+
context.params["id"],
function(response)
{








game.set({
"me":
new
User(response.user)
})








game.set({
"board":
new
Board(response.board)
})








comet.connect()








comet.subscribe("/board-"
+
context.params["id"],
function(board)
{










game.get("board").set(board)








})






})




})

                                            05#tictactoe/static/board.html
in browser
                             game logic example




window.Game
=
Backbone.Model.extend({




"initialize":
function()
{






...






game.get("board").bind("change",
function()
{








if
(this.isMyTurn())
{










return
game.trigger("make-your-move")








}








return
game.trigger("wait-for-move")






})




}


})




                               05#tictactoe/static/js/application.js
in browser
                              game logic example




game.bind("play-with-board",
function(cells)
{






buildBoard(['_'].concat(cells))




})





game.bind("play-with-mark",
function(mark)
{






showPlayerMarker(cellMarksUrl[myMark
=
mark])




})




game.bind("make-your-move",
function()
{






$("#board").undelegate()






$("#board").delegate("*[id^=cell]",
"mouseover",
function()
{








$(this).data("cell").select()






})






$("#board").delegate("*[id^=cell]",
"mouseout",
function()
{








$(this).data("cell").unselect()






})






...

                                05#tictactoe/static/js/application.js
What about
cpu bound
  tasks?
the fork
                               be with you


#!/bin/bash

for
count
in
`seq
1
100`;
do




echo
$count




sleep
0.1
done




                03#long_running_jobs/long_running_job.sh
the fork
                                be with you
var
spawn
=
require("child_process").spawn,




server
=
require("http").createServer()

server.on("request",
function(request,
response)
{


var
job
=
spawn("./long_running_job.sh")



job.stdout.on("data",
function(tick)
{




response.write(tick)




})



job.on("exit",
function()
{




response.end()


})
})


              03#long_running_jobs/long_running_server.js
the fork
                                     be with you
coder@apollo:~$ ab -c 1 -n 1 "http://localhost:8080/"
...
Concurrency Level:      1
Time taken for tests:   10.531 seconds
...


coder@apollo:~$ ab -c 1 -n 2 "http://localhost:8080/"
...
Concurrency Level:      1
Time taken for tests:   20.108 seconds
...
the fork
                                     be with you
coder@apollo:~$ ab -c 2 -n 1 "http://localhost:8080/"
...
Concurrency Level:      2
Time taken for tests:   10.634 seconds
...

coder@apollo:~$ ab -c 100 -n 100 "http://localhost:8080/"
...
Concurrency Level:      100
Time taken for tests:   11.198 seconds
...

coder@apollo:~$ ab -c 500 -n 500 "http://localhost:8080/"
...
Concurrency Level:      500
Time taken for tests:   31.082 seconds
...
enter comet


w
 at
 at ch
watch
    ch
                M                spawn
w




                watch
            w




                        w
         t a




                        at
           ch




                            ch
enter comet



demo
static handler

var
port
=
8080

var
server
=
connect.createServer(connect.logger())


.use("/comet",
function(request,
response)
{
...
})


.use("/spawn",
function(request,
response)
{
...
})


.use("/",
connect.staticProvider({





"root":
path.join(__dirname,
"static"),





"cache":
true



}))

comet.attach(server)

server.listen(port)



                            04#progress/progress_server.js
comet handler


var
comet
=
new
Faye.NodeAdapter({


"mount":
"/comet",
"timeout":
50

})

var
server
=
connect.createServer(connect.logger())


.use("/comet",
function(request,
response,
next)
{




comet.handle(request,
response)


})


...




                            04#progress/progress_server.js
spawn handler
var
client
=
comet.getClient(),
jobCounter
=
0

var
server
=
connect.createServer(connect.logger())


.use("/comet",
function(request,
response)
{
...
})


.use("/spawn",
function(request,
response,
next)
{




var
worker
=
spawn("./long_running_process.sh"),








jobId
=
jobsCounter++













response.writeHead(200,
{
"Content-Type":
"plain/text"
})




response.end("OKn")





worker.stdout.on("data",
function(progress)
{






client.publish("/job-progress",
{









"id":
jobId,









"progress":
parseInt(progress.toString(),
10)






})




})


})
                             04#progress/progress_server.js
in browser

<script>


$(function()
{




var
comet
=
new
Faye.Client("/comet")





comet.connect()




comet.subscribe("/job-progress",
function(job)
{






$("#template").progressBar(job.id,
job.progress)




})


})
</script>




                                 04#progress/static/index.html
node.js is
 awesome
 but when
 should i
  use it?
when to use it?

•   chat/messaging
•   real-time applications
•   intelligent proxies
•   high concurrency applications
•   communication hubs
•   coordinators
please tell
me something
 bad about
  node.js
some warnings

•   release stable 0.2.4 (young)
•   lots of stuffs to look at
•   lots of half backed stuffs
•   retro compatibility???
•   bad at handling static contents
•   hard to find organized and
    authoritative informations
Questions?
gabriele lana
  gabriele.lana@cleancode.it
    twitter: @gabrielelana
         this presentation code is on
https://github.com/gabrielelana/node-examples

More Related Content

What's hot

introduction to Vue.js 3
introduction to Vue.js 3 introduction to Vue.js 3
introduction to Vue.js 3
ArezooKmn
 
Nodejs presentation
Nodejs presentationNodejs presentation
Nodejs presentation
Arvind Devaraj
 
React + Redux Introduction
React + Redux IntroductionReact + Redux Introduction
React + Redux Introduction
Nikolaus Graf
 
Introduction to Node js
Introduction to Node jsIntroduction to Node js
Introduction to Node js
Akshay Mathur
 
NodeJS for Beginner
NodeJS for BeginnerNodeJS for Beginner
NodeJS for Beginner
Apaichon Punopas
 
ES2015 / ES6: Basics of modern Javascript
ES2015 / ES6: Basics of modern JavascriptES2015 / ES6: Basics of modern Javascript
ES2015 / ES6: Basics of modern Javascript
Wojciech Dzikowski
 
NodeJS guide for beginners
NodeJS guide for beginnersNodeJS guide for beginners
NodeJS guide for beginners
Enoch Joshua
 
Introduction to NodeJS
Introduction to NodeJSIntroduction to NodeJS
Introduction to NodeJS
Cere Labs Pvt. Ltd
 
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Edureka!
 
Rxjs ngvikings
Rxjs ngvikingsRxjs ngvikings
Rxjs ngvikings
Christoffer Noring
 
Intro to React
Intro to ReactIntro to React
Intro to React
Justin Reock
 
Intro to Asynchronous Javascript
Intro to Asynchronous JavascriptIntro to Asynchronous Javascript
Intro to Asynchronous Javascript
Garrett Welson
 
ES6 presentation
ES6 presentationES6 presentation
ES6 presentation
ritika1
 
ReactJS presentation.pptx
ReactJS presentation.pptxReactJS presentation.pptx
ReactJS presentation.pptx
DivyanshGupta922023
 
Nodejs functions & modules
Nodejs functions & modulesNodejs functions & modules
Nodejs functions & modules
monikadeshmane
 
Express js
Express jsExpress js
Express js
Manav Prasad
 
JS Event Loop
JS Event LoopJS Event Loop
JS Event Loop
Saai Vignesh P
 

What's hot (20)

introduction to Vue.js 3
introduction to Vue.js 3 introduction to Vue.js 3
introduction to Vue.js 3
 
Nodejs presentation
Nodejs presentationNodejs presentation
Nodejs presentation
 
React + Redux Introduction
React + Redux IntroductionReact + Redux Introduction
React + Redux Introduction
 
Introduction to Node js
Introduction to Node jsIntroduction to Node js
Introduction to Node js
 
NodeJS for Beginner
NodeJS for BeginnerNodeJS for Beginner
NodeJS for Beginner
 
ES2015 / ES6: Basics of modern Javascript
ES2015 / ES6: Basics of modern JavascriptES2015 / ES6: Basics of modern Javascript
ES2015 / ES6: Basics of modern Javascript
 
Express node js
Express node jsExpress node js
Express node js
 
NodeJS guide for beginners
NodeJS guide for beginnersNodeJS guide for beginners
NodeJS guide for beginners
 
Node ppt
Node pptNode ppt
Node ppt
 
Introduction to NodeJS
Introduction to NodeJSIntroduction to NodeJS
Introduction to NodeJS
 
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
Node.js Tutorial for Beginners | Node.js Web Application Tutorial | Node.js T...
 
Rxjs ngvikings
Rxjs ngvikingsRxjs ngvikings
Rxjs ngvikings
 
Intro to React
Intro to ReactIntro to React
Intro to React
 
Intro to Asynchronous Javascript
Intro to Asynchronous JavascriptIntro to Asynchronous Javascript
Intro to Asynchronous Javascript
 
ES6 presentation
ES6 presentationES6 presentation
ES6 presentation
 
ReactJS presentation.pptx
ReactJS presentation.pptxReactJS presentation.pptx
ReactJS presentation.pptx
 
Nodejs functions & modules
Nodejs functions & modulesNodejs functions & modules
Nodejs functions & modules
 
Express js
Express jsExpress js
Express js
 
JS Event Loop
JS Event LoopJS Event Loop
JS Event Loop
 
Ajax and Jquery
Ajax and JqueryAjax and Jquery
Ajax and Jquery
 

Similar to Nodejs Explained with Examples

Introduction to Nodejs
Introduction to NodejsIntroduction to Nodejs
Introduction to Nodejs
Gabriele Lana
 
A language for the Internet: Why JavaScript and Node.js is right for Internet...
A language for the Internet: Why JavaScript and Node.js is right for Internet...A language for the Internet: Why JavaScript and Node.js is right for Internet...
A language for the Internet: Why JavaScript and Node.js is right for Internet...
Tom Croucher
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applicationsTom Croucher
 
A language for the Internet: Why JavaScript and Node.js is right for Internet...
A language for the Internet: Why JavaScript and Node.js is right for Internet...A language for the Internet: Why JavaScript and Node.js is right for Internet...
A language for the Internet: Why JavaScript and Node.js is right for Internet...Tom Croucher
 
Node.js - async for the rest of us.
Node.js - async for the rest of us.Node.js - async for the rest of us.
Node.js - async for the rest of us.
Mike Brevoort
 
Original slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talkOriginal slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talk
Aarti Parikh
 
Play!ng with scala
Play!ng with scalaPlay!ng with scala
Play!ng with scala
Siarzh Miadzvedzeu
 
Ruby MVC from scratch with Rack
Ruby MVC from scratch with RackRuby MVC from scratch with Rack
Ruby MVC from scratch with Rack
DonSchado
 
soft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.js
soft-shake.ch
 
Intro to Node
Intro to NodeIntro to Node
Intro to Node
Aaron Stannard
 
Event-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 EngineEvent-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 Engine
Ricardo Silva
 
Server side JavaScript: going all the way
Server side JavaScript: going all the wayServer side JavaScript: going all the way
Server side JavaScript: going all the way
Oleg Podsechin
 
Building web framework with Rack
Building web framework with RackBuilding web framework with Rack
Building web framework with Rack
sickill
 
Event driven programming -- Node.JS
Event driven programming -- Node.JSEvent driven programming -- Node.JS
Event driven programming -- Node.JS
Dimitri Teravanessian
 
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQueryRemedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQueryTatsuhiko Miyagawa
 
Play vs Rails
Play vs RailsPlay vs Rails
Play vs Rails
Daniel Cukier
 
NodeJS
NodeJSNodeJS
NodeJS
Alok Guha
 
Node js presentation
Node js presentationNode js presentation
Node js presentationmartincabrera
 
From Ruby to Node.js
From Ruby to Node.jsFrom Ruby to Node.js
From Ruby to Node.js
jubilem
 

Similar to Nodejs Explained with Examples (20)

Introduction to Nodejs
Introduction to NodejsIntroduction to Nodejs
Introduction to Nodejs
 
A language for the Internet: Why JavaScript and Node.js is right for Internet...
A language for the Internet: Why JavaScript and Node.js is right for Internet...A language for the Internet: Why JavaScript and Node.js is right for Internet...
A language for the Internet: Why JavaScript and Node.js is right for Internet...
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applications
 
JS everywhere 2011
JS everywhere 2011JS everywhere 2011
JS everywhere 2011
 
A language for the Internet: Why JavaScript and Node.js is right for Internet...
A language for the Internet: Why JavaScript and Node.js is right for Internet...A language for the Internet: Why JavaScript and Node.js is right for Internet...
A language for the Internet: Why JavaScript and Node.js is right for Internet...
 
Node.js - async for the rest of us.
Node.js - async for the rest of us.Node.js - async for the rest of us.
Node.js - async for the rest of us.
 
Original slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talkOriginal slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talk
 
Play!ng with scala
Play!ng with scalaPlay!ng with scala
Play!ng with scala
 
Ruby MVC from scratch with Rack
Ruby MVC from scratch with RackRuby MVC from scratch with Rack
Ruby MVC from scratch with Rack
 
soft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.js
 
Intro to Node
Intro to NodeIntro to Node
Intro to Node
 
Event-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 EngineEvent-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 Engine
 
Server side JavaScript: going all the way
Server side JavaScript: going all the wayServer side JavaScript: going all the way
Server side JavaScript: going all the way
 
Building web framework with Rack
Building web framework with RackBuilding web framework with Rack
Building web framework with Rack
 
Event driven programming -- Node.JS
Event driven programming -- Node.JSEvent driven programming -- Node.JS
Event driven programming -- Node.JS
 
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQueryRemedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
 
Play vs Rails
Play vs RailsPlay vs Rails
Play vs Rails
 
NodeJS
NodeJSNodeJS
NodeJS
 
Node js presentation
Node js presentationNode js presentation
Node js presentation
 
From Ruby to Node.js
From Ruby to Node.jsFrom Ruby to Node.js
From Ruby to Node.js
 

More from Gabriele Lana

Microservice Architectures
Microservice ArchitecturesMicroservice Architectures
Microservice Architectures
Gabriele Lana
 
Professional Programmer 2018
Professional Programmer 2018Professional Programmer 2018
Professional Programmer 2018
Gabriele Lana
 
Beyond Phoenix
Beyond PhoenixBeyond Phoenix
Beyond Phoenix
Gabriele Lana
 
Parse Everything With Elixir
Parse Everything With ElixirParse Everything With Elixir
Parse Everything With Elixir
Gabriele Lana
 
Professional Programmer (3 Years Later)
Professional Programmer (3 Years Later)Professional Programmer (3 Years Later)
Professional Programmer (3 Years Later)
Gabriele Lana
 
Resource Oriented Design
Resource Oriented DesignResource Oriented Design
Resource Oriented Design
Gabriele Lana
 
Agileday Coderetreat 2013
Agileday Coderetreat 2013Agileday Coderetreat 2013
Agileday Coderetreat 2013Gabriele Lana
 
Milano Legacy Coderetreat 2013
Milano Legacy Coderetreat 2013Milano Legacy Coderetreat 2013
Milano Legacy Coderetreat 2013Gabriele Lana
 
Minimum Viable Product
Minimum Viable ProductMinimum Viable Product
Minimum Viable ProductGabriele Lana
 
coderetreat
coderetreatcoderetreat
coderetreat
Gabriele Lana
 
Professional Programmer
Professional ProgrammerProfessional Programmer
Professional Programmer
Gabriele Lana
 
It is not supposed to fly but it does
It is not supposed to fly but it doesIt is not supposed to fly but it does
It is not supposed to fly but it does
Gabriele Lana
 
MongoDB With Style
MongoDB With StyleMongoDB With Style
MongoDB With Style
Gabriele Lana
 
Nosql
NosqlNosql
Magic of Ruby
Magic of RubyMagic of Ruby
Magic of Ruby
Gabriele Lana
 
Why couchdb is cool
Why couchdb is coolWhy couchdb is cool
Why couchdb is cool
Gabriele Lana
 
ProgrammingKatas
ProgrammingKatasProgrammingKatas
ProgrammingKatas
Gabriele Lana
 
CouchDB Vs MongoDB
CouchDB Vs MongoDBCouchDB Vs MongoDB
CouchDB Vs MongoDB
Gabriele Lana
 

More from Gabriele Lana (20)

Microservice Architectures
Microservice ArchitecturesMicroservice Architectures
Microservice Architectures
 
Professional Programmer 2018
Professional Programmer 2018Professional Programmer 2018
Professional Programmer 2018
 
Beyond Phoenix
Beyond PhoenixBeyond Phoenix
Beyond Phoenix
 
Parse Everything With Elixir
Parse Everything With ElixirParse Everything With Elixir
Parse Everything With Elixir
 
The Magic Of Elixir
The Magic Of ElixirThe Magic Of Elixir
The Magic Of Elixir
 
Professional Programmer (3 Years Later)
Professional Programmer (3 Years Later)Professional Programmer (3 Years Later)
Professional Programmer (3 Years Later)
 
Resource Oriented Design
Resource Oriented DesignResource Oriented Design
Resource Oriented Design
 
Agileday Coderetreat 2013
Agileday Coderetreat 2013Agileday Coderetreat 2013
Agileday Coderetreat 2013
 
Milano Legacy Coderetreat 2013
Milano Legacy Coderetreat 2013Milano Legacy Coderetreat 2013
Milano Legacy Coderetreat 2013
 
Minimum Viable Product
Minimum Viable ProductMinimum Viable Product
Minimum Viable Product
 
API Over HTTP
API Over HTTPAPI Over HTTP
API Over HTTP
 
coderetreat
coderetreatcoderetreat
coderetreat
 
Professional Programmer
Professional ProgrammerProfessional Programmer
Professional Programmer
 
It is not supposed to fly but it does
It is not supposed to fly but it doesIt is not supposed to fly but it does
It is not supposed to fly but it does
 
MongoDB With Style
MongoDB With StyleMongoDB With Style
MongoDB With Style
 
Nosql
NosqlNosql
Nosql
 
Magic of Ruby
Magic of RubyMagic of Ruby
Magic of Ruby
 
Why couchdb is cool
Why couchdb is coolWhy couchdb is cool
Why couchdb is cool
 
ProgrammingKatas
ProgrammingKatasProgrammingKatas
ProgrammingKatas
 
CouchDB Vs MongoDB
CouchDB Vs MongoDBCouchDB Vs MongoDB
CouchDB Vs MongoDB
 

Recently uploaded

UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
Fwdays
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Inflectra
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
CatarinaPereira64715
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 

Recently uploaded (20)

UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
ODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User GroupODC, Data Fabric and Architecture User Group
ODC, Data Fabric and Architecture User Group
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 

Nodejs Explained with Examples