You may have heard that Node.js as JavaScript for the server-side and you may be wondering why anyone would want that!. Or maybe you know exactly what Node.js is, but aren’t sure when or why to use it.
This month Coffee@DBG comes up with “Step into the Node JS Express” to answer all your questions on Node.JS. If you are enthusiastic to know more about it and why it’s making waves in the community, join it now before the seats get filled.
Coffee @ DBG is a Rendezvous of open interactive discussions in technology, where enthusiasts from different companies of Technopark have a get-together to discuss and share their knowledge over a cup of Coffee at DBG.
Coffee@DBG has been the most popular tech event in Technopark happening every month on first Wednesdays which will also provide a platform for programmers to get free consultation on problems they are facing in real work.
First ever talk about Node.JS in Kerala by its early adopters.
3. My ongoing R&D work: IntegralJ
http://integralj.org (open source)
4. My recent products
● Virtual Private Transport
o Keyhole approach to secure remote service access.
o http://shelloid.com
o Node.js, Netty, Redis, MySQL, Google protobuf.
o Basic engine open sourced.
● Sensoid IoT platform
o Distributed stream query platform.
o Node.js, Redis, InfluxDB, ElasticSearch, MySQL.
5. Server-side technology requirements
● Performance
o Need optimized execution
● Concurrency
o Need to support many concurrent client requests
● Library support
o e.g., database interfacing.
● Framework support
o For rapid application development.
6. Node.JS
● Performance
o Google’s V8 VM with native JIT compilation
● Concurrency
o Asynchronous I/O (libuv) + clustering
● Library support
o 39K projects in Github
● Framework support
o e.g., Express.JS
7. Synchronous vs Asynchronous I/O
● Synchronous I/O
o Thread blocks till I/O request is complete.
o e.g., $result = mysql_query(“....”); //PHP
● Asynchronous I/O
o Thread does not block
o Uses callback mechanism to notify completion
o e.g., conn.query(“...”, function(err, rows)
{ } );
8. Node.JS Threading model
1. Single computational thread
o Non-blocking, interleaved request processing
o Background worker threads for I/O processing
1. Clustering to utilize multi-core machines
2. No shared memory between cluster processes.
9. Node.JS : When to use
● Great for
o I/O-centric applications
e.g., DB queries, File I/O , network I/O, invocation of
other web services.
o Real-time communication
WebSockets, HTTP long polling
● Not so great for
o Compute-centric applications
e.g., High-end machine learning backend
11. Anatomy of a “hello world” Node.js
var http = require('http');
var server =
http.createServer(function (req, res) {
res.writeHead(200,
{'Content-Type': 'text/html'});
res.end('<h1>Hello World</h1>');
});
server.listen(3000);
No separate HTTP
engine like Apache
required.
Command:
node app.js
12. Serving a file
Buffers the entire file in memory.
●Inefficient for large files.
●Client needs to wait till entire file is
read.
Code source: https://github.com/substack/stream-handbook
13. Node.js Streams
● Data served in
chunks.
● Data event fires
whenever a new
chunk is ready.
Code source: Node.js in Action
14. Streams can be piped!
File stream (input) is piped to the
response stream (output).
The response will employ
chunked Transfer-Encoding.
Code source: https://github.com/substack/stream-handbook
15. Package management
● npm (Node Package Manager)
o Provides simple & powerful package management.
o Reads module dependencies from package.json
o Typical usage: npm install or npm update.
o Can store all dependent modules locally or globally
19. Connect: usage
Create a Connect ‘app’.
●Will store all middleware.
●Itself just a function.
Create a middleware ‘stack’.
Requests will execute
middleware functions till
‘next()’ is not called or end of
stack is reached.
Code source: https://www.npmjs.org/package/connect
20. Connect: usage (2)
● Middleware can be
mounted on specific URL
endpoints.
● Does basic routing.
● Error handler
middleware.
OR
Create Connect-enabled
server.
Code source: https://www.npmjs.org/package/connect
25. Rendering views with Express
Code Source: Node.js in Action
Express configured
with the views
folder.
View engine set as
ejs.
Looks up index.ejs
in the views folder.
27. Passing data to views
Data passed to the
view.
photos is an array.
28. An example view
title
variable
accessed.
photos array
accessed here.
29. Database connectivity
npm install mysql
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'me',
password : 'secret'
});
connection.connect();
connection.query('...', function(err, rows, fields) {
if (err) throw err;
connection.end();
});
https://github.com/felixge/node-mysql
npms
available for
virtually any
SQL/NoSQL
database!
Query completes
only when the
callback is invoked!
30. Authentication
● passport.js
npm install passport
o Authentication middleware for node.js.
o 140+ authentication strategies.
o Supports OpenID and OAuth
o http://passportjs.org
o Session data can be serialized into a store like Redis.
31. Read more
● Node.js in Action
● http://expressjs.com
● http://www.nodebeginner.org/
32. Thank You
Dr. Jayaraj Poroor
Founder, DependSoft Consulting
Peace of mind with dependable software.
jayaraj@dependsoft.com
http://dependsoft.com