NodeJS

Crash course 

02

PAY Namibia 2018

Async programming
Working with files

Synchronous

- Program waits until the previous call is finished

 

- Too slow when you wait for 3rd party responses, reading from fs

   and doing some operations that require high CPU usage

Synchronous

const fs = require('fs')

let content

try {
  content = fs.readFileSync('content.txt', 'utf-8')
} catch (ex) {
  console.log(ex)
}

console.log(content)

You don't want this context.txt to be too big

Asynchronious

- Do time-consuming task without waiting for it.

- Register appropriate jobs when task is completed 

Asynchronious

Santa's little helper  - Callbacks

const fs = require('fs');

function afterReadFileDoThis(err, content) {
  if (err) {
    return console.log(err);
  }

  console.log(content);
}

fs.readFile('file.md', 'utf-8', afterReadFileDoThis);

NodeJS fs lib provides methods for reading  files in both manners 

Asynchronious

Santa's little helper  - Promises

function slowFunction(){
    return new Promise((resolve,reject) =>{
        setTimeout(()=>{
            resolve("slow function done");
        },10000);        
    });
}



slowFunction().then((response)=>{
    console.log(response);
});

Promises are another way of handling async functions/operations

Asynchronious

Santa's little helper  - async/await

function slowFunction(){
    return new Promise((resolve,reject) =>{
        setTimeout(()=>{
            resolve("slow function done");
        },10000);        
    });
}

async function main() {
  let x = await slowFunction();
  console.log(x);
}

main();

Since NodeJS 7.10.0 async/await is added

Checkpoint #1

- Create a async function and try to call it using all three methods

 

- Create async function that calls async function (nested)

Working with files

NodeJS can as well be used  for creating some useful scripts to automate your daily work

 

NodeJS provides fs module that enables easy file manipulation

Read files

//async
fs.readFile('file.md', 'utf-8', (err, content) =>{
  if (err) {
    return console.log(err);
  }
  console.log(content);
});;

let content;

try {
  content = fs.readFileSync('content.txt', 'utf-8');
} catch (ex) {
  console.log(ex);
}

console.log(content);

Write files

//async
fs.writeFile('message.txt', 'Hello Node.js', (err) => {
  if (err) throw err;
  console.log('The file has been saved!');
});

//stream
const wstream = fs.createWriteStream('where_am_i.txt');
wstream.write('We are in PAY\n');
wstream.write('Windhoek, Namibia\n');
wstream.end();

//creating dir
const dir = './pay_files';

if (!fs.existsSync(dir)){
    fs.mkdirSync(dir);
}

Checkpoint #2

Pass three files to your program and print the shortest one

 

Read the config file and create appropriate structure on FS.

//example of config file
rootDir(dir1(file1.txt,file2.txt),dir2(subdir(subdir_file.txt), file.txt),emptyDir())

() - if there are parentheses after the word, that represents a folder. 
All content inside parentheses represents content within that folder. 
It can be another folder or file.
Made with Slides.com