Node.js is an open-source, cross-platform, JavaScript runtime environment that executes JavaScript code outside of a web browser. Node.js lets developers use JavaScript to write command line tools and for server-side scripting—running scripts server-side to produce dynamic web page content before the page is sent to the user's web browser. Consequently, Node.js represents a "JavaScript everywhere" paradigm, unifying web-application development around a single programming language, rather than different languages for server- and client-side scripts.wikipedia
Update NPM
| npm install npm@latest -g
|
firstFile.json
| let hello = "Hello World From NODE JS";
console.log(hello);
|
The Global Objects
global.js
| const path = require("path");
console.log(`The file name is ${path.basename(__filename)}`);
console.log(__dirname);
console.log(__filename);
|
globalProcess.js
| const grab = flag => {
let indexAfterFlag = process.argv.indexOf(flag) + 1;
return process.argv[indexAfterFlag];
};
const greeting = grab("--greeting");
const user = grab("--user");
console.log(`${greeting} ${user}`);
|
questions.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 | const questions = [
"What is your name?",
"What would you rather be doing?",
"What is your preferred programming language?"
];
const ask = (i = 0) => {
process.stdout.write(`\n\n\n ${questions[i]}`);
process.stdout.write(` > `);
};
ask();
const answers = [];
process.stdin.on("data", data => {
answers.push(data.toString().trim());
if (answers.length < questions.length) {
ask(answers.length);
} else {
process.exit();
}
});
process.on("exit", () => {
const [name, activity, lang] = answers;
console.log(`
Thank you for your anwsers.
Go ${activity} ${name} you can write ${lang} code later!!!
`);
});
|
timers.js
| const waitTime = 3000;
console.log(`setting a ${waitTime / 1000} second delay`);
const timerFinished = () => console.log("done");
setTimeout(timerFinished, waitTime);
|
timers02.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | const waitTime = 5000;
const waitInterval = 500;
let currentTime = 0;
const incTime = () => {
currentTime += waitInterval;
const p = Math.floor((currentTime / waitTime) * 100);
};
console.log(`setting a ${waitTime / 1000} second delay`);
const timerFinished = () => {
clearInterval(interval);
console.log("done");
};
const interval = setInterval(incTime, waitInterval);
setTimeout(timerFinished, waitTime);
|
timers03.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 | const waitTime = 5000;
const waitInterval = 500;
let currentTime = 0;
const incTime = () => {
currentTime += waitInterval;
const p = Math.floor((currentTime / waitTime) * 100);
process.stdout.clearLine();
process.stdout.cursorTo(0);
process.stdout.write(`waiting ... ${p}%`);
};
console.log(`setting a ${waitTime / 1000} second delay`);
const timerFinished = () => {
clearInterval(interval);
process.stdout.clearLine();
process.stdout.cursorTo(0);
console.log("done");
};
const interval = setInterval(incTime, waitInterval);
setTimeout(timerFinished, waitTime);
|
ask.js
| const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question("How do you like Node? ", answer => {
console.log(`Your answer: ${answer}`);
});
|
questionsReadline.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 | const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const questions = [
"What is your name? ",
"Where do you live? ",
"What are you going to do with node js? "
];
const collectAnswers = (questions, done) => {
const answers = [];
const [firstQuestion] = questions;
const questionAnswered = answer => {
answers.push(answer);
if (answers.length < questions.length) {
rl.question(questions[answers.length], questionAnswered);
} else {
done(answers);
}
};
rl.question(firstQuestion, questionAnswered);
};
collectAnswers(questions, answers => {
console.log("Thank you for your answers. ");
console.log(answers);
process.exit();
});
|
Export Modules
myModule.js
1
2
3
4
5
6
7
8
9
10
11
12 | let count = 0;
const inc = () => ++count;
const dec = () => --count;
const getCount = () => count;
module.exports = {
inc,
dec,
getCount
};
|
app.js
| const { inc, dec, getCount } = require("./myModule");
inc();
inc();
inc();
dec();
console.log(getCount());
|
Creating Module
collectAnswers.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
module.exports = (questions, done = f => f) => {
const answers = [];
const [firstQuestion] = questions;
const questionAnswered = answer => {
answers.push(answer);
if (answers.length < questions.length) {
rl.question(questions[answers.length], questionAnswered);
} else {
done(answers);
}
};
rl.question(firstQuestion, questionAnswered);
};
|
questions03.js
1
2
3
4
5
6
7
8
9
10
11
12
13 | const collectAnswers = require("./lib/collectAnswers");
const questions = [
"What is your name? ",
"Where do you live? ",
"What are you going to do with node js? "
];
collectAnswers(questions, answers => {
console.log("Thank you for your answers. ");
console.log(answers);
process.exit();
});
|
Events
events.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | const events = require("events");
const emitter = new events.EventEmitter();
emitter.on("customEvent", (message, user) => {
console.log(`${user}: ${message}`);
});
process.stdin.on("data", data => {
const input = data.toString().trim();
if (input === "exit") {
emitter.emit("customEvent", "Goodbye!", "process");
process.exit();
}
emitter.emit("customEvent", input, "terminal");
});
|
Question Example with Events
collectAnswersEvent.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 | const readline = require("readline");
const { EventEmitter } = require("events");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
module.exports = (questions, done = f => f) => {
const answers = [];
const [firstQuestion] = questions;
const emitter = new EventEmitter();
const questionAnswered = answer => {
emitter.emit("answer", answer);
answers.push(answer);
if (answers.length < questions.length) {
rl.question(questions[answers.length], questionAnswered);
} else {
emitter.emit("complete", answers);
done(answers);
}
};
rl.question(firstQuestion, questionAnswered);
return emitter;
};
|
questionsEvent.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | const collectAnswers = require("./lib/collectAnswersEvent");
const questions = [
"What is your name? ",
"Where do you live? ",
"What are you going to do with node js? "
];
const answerEvents = collectAnswers(questions);
answerEvents.on("answer", answer =>
console.log(`question answered: ${answer}`)
);
answerEvents.on("complete", answers => {
console.log("Thank you for your answers. ");
console.log(answers);
});
answerEvents.on("complete", () => process.exit());
|
File System
list.js
| const fs = require("fs");
fs.readdir("./assets", (err, files) => {
if (err) {
throw err;
}
console.log("complete");
console.log(files);
});
console.log("started reading files");
|
readFile.js
| const fs = require("fs");
fs.readFile("./assets/alex.jpg", (err, img) => {
if (err) {
console.log(`An error has occured: ${err.message}`);
process.exit();
}
console.log("file contents read");
console.log(img);
});
|
writeFile.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | const fs = require("fs");
const md = `
# This is a new file
We can write text to a file with fs.writeFile
* fs.readdir
* fs.readFile
* fs.writeFile
`;
fs.writeFile("./assets/notes.md", md.trim(), err => {
if (err) {
throw err;
}
console.log("file saved");
});
|
directory.js
1
2
3
4
5
6
7
8
9
10
11
12
13 | const fs = require("fs");
if (fs.existsSync("storage-files")) {
console.log("Already there");
} else {
fs.mkdir("storage-files", err => {
if (err) {
throw err;
}
console.log("directory created");
});
}
|
append.js
| const fs = require("fs");
const colorData = require("./assets/colors.json");
colorData.colorList.forEach(c => {
fs.appendFile("./storage-files/colors.md", `${c.color}: ${c.hex} \n`, err => {
if (err) {
throw err;
}
});
});
|
rename.js
1
2
3
4
5
6
7
8
9
10
11
12
13 | const fs = require("fs");
fs.renameSync("./assets/colors.json", "./assets/colorData.json");
fs.rename("./assets/notes.md", "./storage-files/notes.md", err => {
if (err) {
throw err;
}
});
setTimeout(() => {
fs.unlinkSync("./assets/alex.jpg");
}, 4000);
|
directories.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | // Removing Directoires
const fs = require("fs");
fs.readdirSync("./storage").forEach(fileName => {
fs.unlinkSync(`./storage/${fileName}`);
});
fs.rmdir("./storage", err => {
if (err) {
throw err;
}
console.log("./storage directory removed");
});
|
Files and Streams
Readable File Streams
readStream.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | const fs = require("fs");
const readStream = fs.createReadStream("./assets/lorum-ipsum.txt", "UTF-8");
let fileTxt = "";
console.log("type something...");
readStream.on("data", data => {
console.log(`I read ${data.length - 1} characters of text`);
fileTxt += data;
});
readStream.once("data", data => {
console.log(data);
});
readStream.on("end", () => {
console.log("finished reading file");
console.log(`In total I read ${fileTxt.length - 1} characters of text`);
});
|
Writeable File Streams
writeStream.js
| const fs = require("fs");
const writeStream = fs.createWriteStream("./assets/myFile.txt", "UTF-8");
const readStream = fs.createReadStream("./assets/lorum-ipsum.txt", "UTF-8");
readStream.pipe(writeStream);
|
Creating child process with exec
exec.js
| const cp = require("child_process");
cp.exec("node readStream", (err, data, stderr) => {
console.log(data);
});
|
Creating child process with spawn
spawn.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | const cp = require("child_process");
const questionApp = cp.spawn("node", ["questions.js"]);
questionApp.stdin.write("Alex \n");
questionApp.stdin.write("Tahoe \n");
questionApp.stdin.write("Change the world \n");
questionApp.stdout.on("data", data => {
console.log(`from the question app: ${data}`);
});
questionApp.on("close", () => {
console.log(`questionApp process exited`);
});
|
TIPS, TRICKS & HACKS
Node Server Processes Detail
Ctrl+Z suspends it, which means it can still be running.
Ctrl+C will actually kill it.
you can also kill it manually like this:
Find the process ID (second from the left):
This may also work