1. A platform which allows us to run Javascript on a computer/server.
  2. Runs on V8 engine and uses non-blocking code (very fast).

HTTP

var http = require('http');
var server = http.createServer(function(req, res){
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World');
})
server.listen(3000, '127.0.0.1');
console.log("Listening on port 3000");

Modules

// stuff.js

function counter(arr) {
    return "This array have " + arr.length + " values";
}
var adder = function(a,b) {
    return `The sum is ${a+b}`;
}
module.exports = {
    counter,
    adder
};

//app.js

var stuff = require("./stuff");
console.log(stuff.counter([1,2,3]));
console.log(stuff.adder(4,5));

File Handling

var fs = require('fs');

//sync
var readMe = fs.readFileSync('readMe.txt', 'utf8');
fs.writeFileSync('writeMe.txt', readMe);

//async
fs.readFile('readMe.txt', 'utf8', function(err, data) {
    fs.writeFile('writeMe.txt', data);
});

fs.unlink('writeMe.txt'); //delete a file

fs.mkdir('stuff', function() {
    fs.readFile('readMe.txt', 'utf8', function(err, data) {
        fs.writeFile('./stuff/writeMe.txt', data);
    })
});

fs.rmdir('stuff'); // remove a empty directory

Serving HTML and JSON data

var http = require('http');
var fs = require('fs');

var myServer = http.createServer(function(req, res) {
    res.writeHead(200, {'content-type': 'application/json'});
    
    // serving html data
    var readStream = fs.createReadStream(__dirname+'/index.html', 'utf8');
    readStream.pipe(res);
    
    // serving json data
    var dummy = {
        name:'dummyName',
        age:25,
        profession:'web developer'
    }
    
    res.end(JSON.stringify(dummy));
})

myServer.listen(3000, '127.0.0.1');

Streams, Buffer and Pipe

var fs = require('fs');

var readStream = fs.createReadStream(__dirname + '/lorem.txt', 'utf8');
var writeStream = fs.createWriteStream(__dirname + '/lorem2.txt');

readStream.on('data', function(chunk){
    console.log('new chunk!!!');
    writeStream.write(chunk);
});

// same as above
readStream.pipe(writeStream);