Skip to content

Instantly share code, notes, and snippets.

@AkshayCHD
Last active January 7, 2020 12:37
Show Gist options
  • Save AkshayCHD/305c2b2e43699813192fc8f9660fff97 to your computer and use it in GitHub Desktop.
Save AkshayCHD/305c2b2e43699813192fc8f9660fff97 to your computer and use it in GitHub Desktop.

Node js Tutorial

First app

firstly to run a node js file, we save the file, lets say the file is named app.js so we execute

node app.js 

Using contents from different files

we can do that by exporting the content from the other file

const tutorial = require("./tutorial")
console.log(tutorial)

app.js

const sum = (num1, num2) => num1 + num2;

 module.exports = sum

Tutorial.js

Exporting multiple modules

Module

Node.js Module. Module in Node.js is a simple or complex functionality organized in single or multiple JavaScript files which can be reused throughout the Node.js application. Each module in Node.js has its own context, so it cannot interfere with other modules or pollute global scope.

Implementation

const tutorial = require("./tutorial")
console.log(tutorial)
console.log(tutorial.sum(5, 5))
console.log(tutorial.pie)
console.log(tutorial.somefunction)

app.js

const sum = (num1, num2) => num1 + num2;
const pie = 3.14
function somefunction() {
    return "some function"
}
module.exports.sum = sum
module.exports.somefunction = somefunction()
module.exports.pie = pie

Tutorial.js

Another way of exporting

const sum = (num1, num2) => num1 + num2;
const pie = 3.14
function somefunction() {
    return "some function"
}

module.exports = {sum : sum, pie: pie, somefunction : somefunction}

Tutorial.js

Events in Node js

When we require the events module we get an EventEmitter class(That is why the constant variable starts with an uppercase letter defining that EventEmitter is a class). Now to access the functionality offered by it we have to create an object of the class.

Creating simple events

const EventEmitter = require('events')
const eventEmitter = new EventEmitter

eventEmitter.on('myevent', (num1, num2) =>{
    console.log("ths sum is " + (num1 + num2))

})

eventEmitter.emit('myevent', 1, 2)

Creating a class extending event emitter

const EventEmitter = require('events')
const eventEmitter = new EventEmitter

// Note that the capital EventEmitter is used when objects extends it
// Because small one is an object itself
class Person extends EventEmitter {
    constructor(name) {
        // sllows us to use this
        super()
        this._name = name
    }   
    get name() {
        return this._name
    }
}

var akshay = new Person('akshay')
var kumar = new Person('kumar')
akshay.on('name',()=> {
    console.log("my name is " + akshay._name)
})
kumar.on('name', ()=>{
    console.log("my name is " + kumar._name)
})
//events are emitted synchronously
//jo event pehle call hua pehle chalega
kumar.emit("name")
akshay.emit("name")

Working with readline module

allows us to promt the user and take input

const readline  = require('readline')
const rl = readline.createInterface({input: process.stdin, 
                            output: process.stdout})

var num1 = Math.floor((Math.random() * 10) + 1)
var num2 = Math.floor((Math.random() * 10) + 1)
let answer = num1 + num2

rl.question(`what is the value of ${num1} + ${num2} ?`, (userinput)=>{
    if(userinput.trim() == answer)
        rl.close()
    else {
        console.log('Incorrect')
        rl.setPrompt("The answer is incorrect please try again")
        rl.prompt()        
    }
})
rl.on('close', ()=>{
    console.log("correct answer")
})

// called whenever enter is presses i.e after prrompt in our case so results in infinite loop if answer false
rl.on('line', (userinput)=> {
    if(userinput.trim() == answer)
        rl.close()
    else {
        rl.setPrompt("incorrect again please enter again")
        rl.prompt()
    }
})

Working with file system module

Writing to a file

const fs = require('fs')


fs.writeFile("example.txt", "This is the text to be writtem", (err)=>{
    if(err)
        console.log(err)
    else {
        console.log("file sucessfully written")
    }
})

Reading from a file

const fs = require('fs')

fs.readFile('example.txt', 'utf8', (err, file)=> {
    if(err) {
        console.log(err)

    } else {
        console.log(file)
    }
})

Renaming a file

const fs = require('fs')

fs.rename('example.txt', 'example2.txt', (err)=>{
    if(err)
        console.log(err)
    else 
        console.log("file renamed sucessfullt")
})

Appending to the file

const fs = require('fs')

fs.appendFile('example2.txt', "This the text to be appended", (err)=>{
    if(err)
        console.log(err)
    else 
        console.log("file appended sucessfullt")
})

Deleting a file

const fs = require('fs')

fs.unlink('example2.txt', (err)=>{
    if(err)
        console.log(err)
    else 
        console.log("file deleted sucessfully")
})

Working with folders

const fs = require('fs')

fs.mkdir('newDir', (err)=>{
    if(err)
        console.log(err)
    else {
        console.log("directory created")
        fs.writeFile("./newDir/1.txt", "this is text", (err)=> {
            if(err)
                console.log(err)

        })
        fs.writeFile("./newDir/2.txt", "this is another text", (err)=> {
            if(err)
                console.log(err)

        })
        fs.readdir('newDir', (err, files)=> {
            if(err)
                console.log(err)
            else
                console.log(files)
        })
    }
})

Using streams

Streams read and write data in the form of chunks so it becomes easy to load very large files when buffer size is limited

const fs = require('fs')

const readStream = fs.createReadStream('example.txt', 'utf8')
readStream.on('data', (chunk) => {
    console.log(chunk)
})

creating an http server

when we make the call from the root domain we call the if part and when from any other domain we use the else part.

const http = require('http')

const server = http.createServer((req, res) => {
    if(req.url == '/') {
        res.write('hello world from node js');
        res.end();
    } else {
        res.write('using some other ');
        res.end();
    }
})
server.listen('3000');

Serving Static files in node server

const http = require('http')
const fs = require('fs')

const server = http.createServer((req, res) => {
    const readStream = fs.createReadStream('./newDir/index.html');
    res.writeHead(200, {'Content-type': 'text/html'});
    readStream.pipe(res);
});
server.listen('4000');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment