an introduction to node.js application development

31
Introduction to Node.js application development Dr. Jayaraj Poroor Founder & CEO, Shelloid http://shelloid.com http://shelloid.org GTech TFG, Jan 21 2015

Upload: shelloidhq

Post on 10-Feb-2017

264 views

Category:

Software


4 download

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

Event Loop Illustrated

http://www.geekgirl.io/understanding-the-event-loop-in-nodejs/

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 framework: Modular web apps

Source: N

ode.js in Action

Install:npm install connect

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

Example Connect middlewares

Serving static filesStatic middlewareconfigured with the folder from which files are served.

Express: Lightweight web framework

Code Source: https://www.npmjs.org/package/express

Routing

Bootstrapping Express application

express -eoutput

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.

View lookup

Source: N

ode.js in Action

Source: Node.js in Action

Passing data to viewsData passed to the view.photos is an array.

An example view

photos array accessed here.

title variable accessed.

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