Introduction
What is Node.js
JavaScript-based environment to create web-servers, networked applications or to perform helpful tasks e.g. minifying or concatenating
A free open source framework
Introduction > What is Node.js
Why Node.js
Can have lots of connections sending information simultaneously
Asynchronous I/O and non-blocking
It's fast, lightweight, efficient, and has ability to use JavaScript on both frontend and backend
Good for real-time applications
Serves as a proxy server
Introduction > Why Node.js
So what's this NPM?
Introduction > So what's this NPM?
Difference Node.js & web JS
Node.js uses a different set of API's that are suitable for backend development
web JavaScript is limited with backend support due security reasons
Introduction > Difference Node.js & web JS
Installation
How to install
Download the latest version from the website
Run the installer
Follow the prompts in the installer
Restart your computer
Installation > How to install
Test the installation
Open Command Line tool
Use to check if Node.js is installed and what version
Use to check if NPM is installed and what version
Installation > Test the installation
node -v
npm -v
Create test file and run it
Create a file called test.js
Add to the file
Go to the Command Line and type
Installation > Create test file and run it
console.log('Some random text here');
node test.js
Console
Methods
Console > Methods
let welcomeMessage = 'Hello World';
let errorMessage = 'Fail!';
let developer = {
favouriteLanguage: "JavaScript",
age: 23
}
// Prints out 'Hello' to the console
console.log(welcomeMessage);
// Prints error message to the console
console.error(errorMessage);
// Prints out an object
console.dir(developer);
Read Eval Print Loop
What is REPL?
Read Eval Print Loop > What is REPL?
Represents a computer environment where a command is entered and the system responds with an output in an interactive mode
Can be started by typing in in the console
node
REPL Commands
Read Eval Print Loop > REPL Commands
// Terminate the current command
ctrl + c
// Terminate the Node REPL
ctrl + c (twice) or ctrl + d
// Going through command history and modify commands
Up/Down keys
// List of current commands
tab
// List of all commands
.help
// Exit from multiline expression
.break or .clear
// Save the current REPL session to a file
.save filename
// Load file content in current REPL session
.load filename
Buffer
What is a Buffer?
Buffer > What is a Buffer?
Used to store binary data while reading data from a file or when receiving packages over the network
Options with Buffers:
- Create
- Read
- Write
- Concatenate
- Convert to JSON
- Compare
Examples
Buffer > Examples
// Creating a Buffer
let foo = new Buffer(10); // 10 = number of octets
let foo = new Buffer([25, 30, 35, 40, 45]);
// Reading a Buffer
buf.toString([encoding][, start][, end])
// start and end are index numbers
// Writing to Buffers
buf.write(string[, offset][, length][, encoding])
// length is number of bytes to write
// Concatenating
Buffer.concat(list[, totalLength])
// Convert to JSON
buf.toJSON()
// Compare Buffers
buf.compare(otherBuffer);
Global objects
What are they?
Global objects > What are they?
Objects that are already included in all available modules
Can be:
- Modules
- Functions
- Strings
- Objects
Examples
Global objects > Examples
// Print information
console
// Get information about the current process
process
// Run callback cb after x milliseconds
setTimeout(cb, ms)
// Stops the timer that was set with setTimeout
clearTimeout(t)
// Runs callback repeatedly for x milliseconds
setInterval(cb, ms)
// The filename of code that is being executed
console.log(__filename);
// The directory of the script that's executing
console.log(__dirname);
Streams
What are Streams?
Streams > What are Streams?
Objects that let you read data from a source or write data to a destination
4 type of streams:
- Readable
- Writable
- Duplex
- Transform
Each type is an EventEmitter instance and throws several events, such as data, end, error and finish
Process
What is it?
Process > What is it?
Every script runs in a process
Every process includes a process object to get all information and control about the current process
Events
Process > Events
// Emitted when the event loop is empty and there is nothing in schedule
beforeExit
// Emitted when the process is about to exit
exit
// Emitted when an exception goes back to the event loop
uncaughtException
Callbacks
What is a Callback?
Callbacks > What is a Callback?
An asynchronous equivalent for a function
It's called at the completion of a task
Blocking call
Callbacks > Blocking call
The script blocks until it reads the file and then only it proceeds to end the program
const FS = require("fs");
let data = FS.readFileSync('test.txt');
console.log(data.toString());
console.log('The end');
// Output: The data from test.text followed by "The end"
Non-blocking call
Callbacks > Non-blocking call
The script doesn't wait, it proceeds to print to the console while the script still continues reading the file.
const FS = require("fs");
FS.readFile('test.txt', function (err, data) {
if (err) return console.error(err);
console.log(data.toString());
});
console.log('The end');
// Output: "The end" followed after by the data from test.txt
Modules
What is a Module?
Modules > What is a Module?
A set of functions
You can create your own Module and include
it in your application
Types of Modules:
- Core
- Local
- 3rd party
Core Modules
Modules > Core Modules
// Creating a HTTP server (includes classes, methods and events)
http
// URL resolution and parsing (includes methods)
url
// Dealing with query strings (includes methods)
querystring
// Dealing with file paths (includes methods)
path
// Working with file I/O (includes classes, methods and events)
fs
// Utility functions
util
Include a Core Module
Modules > Core Modules > Include a Core Module
const FOO = require('core_module');
Local Modules
Modules > Local Modules
Locally created modules in your application
Can include different functionalities separated in files and folders
Loading a Local Module
Modules > Local Modules > Loading a Local Module
const FOO = require('local_module');
Event Loops
What are Event Loops?
A main loop that listens for events
Triggers a callback function when an event is detected
There are multiple in-built events which are used to bind events and event listeners
Event Loops > What are Event Loops?
EventEmitter
All objects which emit events are the instances of events.EventEmitter
EventEmitter class is within the events module
Event Loops > EventEmitter
// Use require (or import) to import the module
const EVENTS = require('events');
// Creating an eventEmitter object
let eventEmitter = new EVENTS.EventEmitter();
Events
Event Loops > EventEmitter > Events
// Event emitted when a listener is added
newListener
// Event emitted when a listener is removed
removeListener
Methods
Event Loops > EventEmitter > Methods
// Returns an array of listeners
listeners(event)
// Adding a listener at the and of the listeners array
addListener(event, listener)
// Adding a listener at the end of the listeners array
on(event, listener)
// Removes all listeners
removeAllListeners([event])
// Removing a listener from the listener array
removeListener(event, listener)
// Adding a one time listener to the event
once(event, listener)
// EventEmitters will give a warning if more than x
// (usually 10) listeners are added to an event
setMaxListeners(n)
File system
What is it?
File system > What is it?
Using simple wrappers around POSIX functions using File I/O
Can be imported using the require method
fs module has synchronous and asynchronous forms
Asynchronous is recommended since it's non-blocking
File methods
File system > File methods
// Opening a file
fs.open(path, flags[, mode], callback)
// Getting information from a file
fs.stat(path, callback)
// Closing a file
fs.close(fd, callback)
// fd = file descriptor returned by fs.open()
// Reading a file
fs.read(fd, buffer, offset, length, position, callback)
// fd = file descriptor returned by fs.open()
// Writing to a file
fs.writeFile(filename, data[, options], callback)
// Deleting or truncating a file
fs.unlink(path, callback) // Deleting
fs.ftruncate(fd, len, callback) // Truncate
Directory methods
File system > Directory methods
// Create a directory
fs.mkdir(path[, mode], callback)
// Mode = permission
// Read a directory
fs.readdir(path, callback)
// Delete/remove a directory
fs.rmdir(path, callback)
Debugging
Core debugger
Debugging > Core debugger
const FS = require('fs');
FS.readFile('test.txt', 'utf8', function (err, data) {
// Built-in non-graphic debugging tool
debugger;
if(err) throw err;
console.log(data);
});
Run the following command:
node debug app.js
Commands
Debugging > Core debugger > Commands
// Add the variable or expression into watch
watch
// See the values of what you have added into watch
watcher
// Pause the running code
Pause
// Stop at the next statement
next
// Step in function
step
// Step out of function
out
// Continue to execute and stop at the debugger statement
cont
Example
Read data
Example > Read data
// file.txt
Michael A 2
Jeroen B 2
Nando C 1
Nick B 8
Ruben D 5
// Load the fs (filesystem) module
const FS = require('fs');
// Reads the contents of the file
FS.readFile('file_log.txt', function (err, logData) {
// Displays an exception and end app if an error occurred
if (err) throw err;
// logData is a Buffer, then converts to a string
let text = logData.toString();
});
Add parsing data
Example > Add parsing data
// Load the fs (filesystem) module
const FS = require('fs');
// Reads the contents of the file
FS.readFile('file_log.txt', function (err, logData) {
// Displays an exception and end app if an error occurred
if (err) throw err;
// logData is a Buffer, then converts to a string
let text = logData.toString();
let results = {};
// Break up the file into lines.
let lines = text.split('\n');
// Go through every line
lines.forEach(function(line) {
// Divides the string with a space
let parts = line.split(' ');
// Selects the second item of the Array
let name = parts[0];
// Selects the third item of the Array
let count = parseInt(parts[2]);
if(!results[name]) {
results[name] = 0;
}
results[name] += parseInt(count);
});
console.log(results);
});
Resources
Useful links
Resources > Useful links
Node.js
By Kim Massaro
Node.js
An introduction
- 913