an introduction to node.js application development
TRANSCRIPT
Introduction to Node.js application development
Dr. Jayaraj PoroorFounder & CEO, Shelloid
http://shelloid.com http://shelloid.org
GTech TFG, Jan 21 2015
About ShelloidOpen Source Technology (http://shelloid.org)
Operational Log Intelligence (http://shelloid.com)
Server-side technology requirements● Performance
o Need optimized execution● Concurrency
o Need to support many concurrent client requests
● Library supporto e.g., database interfacing.
● Framework supporto For rapid application development.
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
Synchronous vs Asynchronous I/O
● Synchronous I/Oo Thread blocks till I/O request is complete.o e.g., $result = mysql_query(“....”); //PHP
● Asynchronous I/Oo Thread does not blocko Uses callback mechanism to notify completiono e.g., conn.query(“...”, function(err, rows)
{ } );
Node.JS Threading model1.Single computational thread
o Non-blocking, interleaved request processingo Background worker threads for I/O processing
2.Clustering to utilize multi-core machines
3.No shared memory between cluster processes.
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
Anatomy of a “hello world” Node.jsvar 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
Serving a file
Code source: https://github.com/substack/stream-handbook
Buffers the entire file in memory. ● Inefficient for large files.● Client needs to wait till entire file
is read.
Node.js Streams
● Data served in chunks.● Data event fires whenever a new
chunk is ready.
Code source: Node.js in Action
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
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
A sample package.json{ "name": "SomeApp", "description": "SomeApp Web Application", "version": "0.0.1", "private": true, "dependencies": { "express": "3.6.0", "connect": "2.15.0", "mysql": "*", }}
Secure HTTP with Node.js
Code source: Node.js in Action
Key and certificate files provided.Use gpg, openssl etc. to generate key and CSR.
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
Connect: usage (2)● Middleware can be mounted
on specific URL endpoints.● Does basic routing.
● Error handler middleware.
Create Connect-enabled server.
Code source: https://www.npmjs.org/package/connectOR
Rendering views with Express
Code S
ource: Node.js in A
ction
Express configured with the views folder.
View engine set as ejs.
Looks up index.ejs in the views folder.
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!
Authentication● passport.js
o Authentication middleware for node.js.o 140+ authentication strategies.o Supports OpenID and OAutho http://passportjs.orgo Session data can be serialized into a store like
Redis.
npm install passport
Read more● Node.js in Action● http://expressjs.com● http://www.nodebeginner.org/
Using Shelloidnpm install -g shelloid
shelloid app-folder [env name]
Learn more at http://shelloid.org
Requires admin/super user privilege
Dr. Jayaraj PoroorFounder, Shelloid Systems
Open source cloud-ready Node.js application server
[email protected]://shelloid.com
Thank You