2. Agenda
Introduction
History
Why Node.js
Community
Features
FAQ
Few Awesome Modules!
Conclusion
get ready to node, this session is
hands on!
3.
4. Introduction
It’s NOT a web framework, and it’s also NOT a language
Open Source, cross-platform runtime environment for
server-side and networking applications
Based on Google V8 Engine 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
5. Licence MIT
Last release : v7.2.1
385,151 + npm modules
6. History
Initial Release May 27, 2009
Created by Ryan Dahl
Development && maintenance sponsored by Joyent
7. Is Node JS a serious option for enterprise
applications?
In fact, it’s our
best option for
typical (heavy
data IO) web
applications!
Let’s see why…
8. Why Node?
Less keystrokes with JS
JS on server and client allows
for more code reuse
A lite stack (quick create-test
cycle)
1 Language for Frontend and
Backend
Large number of offerings for
web app creation
Active community
Build Fast!
9. Why Node?
Fast V8 Engine
Single Thread with Event
Loop
Great I/O performance
with event loop!
Small number of layers
Horizontal Scaling
Run Fast!
10. Why Node?
JS across stack allows
easier refactoring
Smaller codebase
Cross platform( Windows,
Linux, Mac)
See #1 (Build Fast!)
Adapt Fast!
“There’s a shift in enterprise IT,
unbundling the monolith software
packages [at many companies] that
11. Community
Over 8 billion downloads per month
NPM averages 461 new modules per day (ruby gems
37 per day, maven 156 per day)
Total Number of npm Packages: 105,109
Second most stared project on Github
Plus, corporate backing from Joyent
15. Node Globals
process – object providing information and methods
for the current process
➢ process.stdout, process.stderr, process.stdin,
process.argv, process.env
console – allows printing to stdout and stderr
require() – function to load a module
module – refers to the current module
16. Modules
Modules allow Node to be extended (act as libaries)
We can include a module with the global require
function, require(‘module’)
Node provides core modules that can be included by
their name:
File System – require(‘fs’)
Http – require(‘http’)
Utilities – require(‘util’)
17. Modules
We can also break our application up into modules
and require them using a file path:
‘/’ (absolute path), ‘./’ and ‘../’ (relative to calling file)
Any valid type can be exported from a module by
assigning it to module.exports
23. Node Architecture
How can this be faster?
Expensive I/O is moved off request thread (in
traditional multi-threaded environments, each thread
handles the complete request)
Threads are limited by RAM and are expensive to create
Avoids context switching
Allows us to easily write asynchronous code without
heavy thread management (synchronization,
message passing, etc.)
27. NPM
Modules can be shared by packaging
Node Package Manager (NPM) is a package manager
for node
Command line interface
Public registry www.npmjs.org
Allows us to install packages from repo, and publish our
own
28. NPM
First, we need to create a package.json file for our
app
Contains metadata for our app and lists the
dependencies
Package.json Interactive Guide
29. NPM
Common npm commands:
npm init initialize a package.json file
npm install <package name> -g install a package, if –g option is
given package will be installed as a global, --save and --save-dev will add package
to your dependencies
npm install install packages listed in package.json
npm ls –g listed local packages (without –g) or global packages (with –g)
npm update <package name> update a package
30. NPM
SemVar Versions (version [Major].[Minor].[Patch]):
= (default), >, <, >=, <=
* most recent version
1.2.3 – 2.3.4 version greater than 1.2.3 and less than 2.3.4
~1.2.3 most recent patch version greater than or equal to 1.2.3 (>=1.2.3 <1.3.0)
^1.2.3 most recent minor version greater than or equal to 1.2.3 (>=1.2.3 <2.0.0)
32. FAQ
V8 engine performs just as good, if not better than jvm
Most ‘intensive’ code is usually due to I/O
If needed, child processes, web workers, and so forth can be used
○ Of course! As always, be aware of language holes (like ‘eval’)
○ Node Security Project lists vulnerabilities in packages
What about CPU intensive code?
Is Node secure?
33. FAQ
○ Most ‘cryptic’ code is DOM related (ex. selectors)
○ Preprocessors and ECMAScript 6 bringing more strict typing (and
compile time checking)
○ As always, need standards and best practices!
What about code
readability/maintenance with JavaScript?
34. FAQ
○ Built-in Node debugger not great, but IDEs and other tools have the
usual debugging experience
○ V. 0.12 will improve tracing capabilities to allow better performance
monitoring, and production grade tools such as New Relic
Isn’t debugging and production
monitoring bad?
35. Other Awesome Modules
skipper-gridfs – A skipper adapter to allow uploading
files to MongoDB's GridFS
async – higher order functions and common patterns for
asynchronous code
fs-extra– fs-extra contains methods that aren't included
in the vanilla Node.js fs package. Such as mkdir -p, cp -r,
and rm -rf
request – Simplified HTTP request client
mongoose – MongoDB ODM
36. Other Awesome Modules
sails– API-driven framework for building realtime apps,
using MVC conventions (based on Express and Socket.io)
express – Fast, unopinionated, minimalist web
framework
jsreport– javascript based business reporting
config – runtime configuration
xls-to-json – Converting xls file to json files using nodejs