# Built-in modules
# process
Het process object is een globaal object dat toegang verleent tot de informatie en de controle over het huidige Node.js proces.
# process.env
Via de env eigenschap uit het process object kunnen we een object opvragen bestaande uit eigenschappen uit de gebruikersomgeving:
console.log(process.env);
We kunnen in het .env-object configuratievariabelen instellen die door de applicatie kunnen worden gebruikt. Bijvoorbeeld, je kunt een variabele zoals process.env.PORT gebruiken om de poort waarop de server luistert te configureren.
Het is een veilige manier om gevoelige informatie, zoals API-sleutels of databaseverbindingssnaren, op te slaan. Deze waarden kunnen buiten de broncode worden gehouden en dynamisch worden ingesteld op basis van de omgeving.
# Hoe ENV-variabelen instellen?
In lokale ontwikkeling kun je omgevingsvariabelen instellen in het terminalvenster waarin je de Node.js-applicatie start:
PORT=3000 node app.js1Een veelgebruikte praktijk is om een bestand met de naam .env te maken in de root van je project en daarin de omgevingsvariabelen op te slaan. Hiervoor hebben wel een externe
packagenodig genaamddotenv..env
API_KEY = my_random_api_key;1npm install dotenv1app.js
require("dotenv").config(); console.log(process.env.API_KEY);1
2
# listeners
Via het process object kunnen we ook luisteraars registreren, die reageren op specifieke gebeurtenissen die in het process kunnen plaatsvinden. Via de on methode kunnen we luisteraars koppelen, om bijvoorbeeld iets te doen net voor het programma wordt afgesloten:
process.on("exit", (code) => {
console.log(`About to exit with code: ${code}`);
});
2
3
# path
De path module (opens new window) maakt het mogelijk om bestandspaden platformonafhankelijk op te halen en eventueel te bewerken.
Hoewel het verleidelijk kan zijn om paden rechtstreeks te hardcoderen, zorgt de path-module voor:
Platformonafhankelijkheid
Verschillende besturingssystemen (Windows, Linux, macOS) gebruiken verschillende notaties voor paden (bijvoorbeeld backslashes
\versus slashes/). Depathmodule zorgt ervoor dat paden correct worden geformatteerd op basis van het gebruikte besturingssysteem. Dit maakt je code platformonafhankelijk.Leesbaarheid
Het gebruik van de
pathmodule maakt je code leesbaarder, omdat het duidelijk aangeeft dat je met bestands- of mapstructuren werkt.Veiligheid
De module kan omgaan met speciale tekens en voorkomt hierdoor mogelijks beveiligingslekken.
Toekomstige Wijzigingen
Als je code op meerdere platforms moet werken, is het mogelijk dat je padnotaties in de toekomst moet aanpassen als je besluit om te schakelen naar een ander besturingssysteem. Het gebruik van de
pathmodule vermindert de kans op fouten bij het beheren van deze veranderingen.
const path = require("path");
Met de path.join() methode kunnen we alle vermelde paden (moet een string-waarde zijn) met elkaar verbinden gebruik makend van de separator van het platform:
let joinedPath = path.join("users", "phildp", "bio.md");
console.log(joinedPath); // users\phildp\bio.md
// Goed
const fullPath = path.join(__dirname, "bestanden", "document.txt");
// Niet aanbevolen (minder leesbaar, minder veilig)
const fullPathHardcoded = __dirname + "/bestanden/document.txt";
2
3
4
5
6
7
8
# fs
De fs module in Node.js staat voor “File System” en biedt functionaliteiten om met het bestandssysteem te werken. Het stelt ontwikkelaars in staat om bestanden te lezen, schrijven, wijzigen, verwijderen en andere bestandsbewerkingen uit te voeren
Hiermee kunnen Node.js-applicaties toegang krijgen tot het lokale bestandssysteem. Dit zijn de bestanden opgeslagen op de server, niet op de client-side. Hierdoor kunnen we bestanden, mappen en hun inhoud bewerken. Het biedt zowel synchrone als asynchrone methoden om verschillende taken met betrekking tot het bestandssysteem uit te voeren.
Lezen van bestanden
const fs = require("fs");
fs.readFile("bestand.txt", "utf8", (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});
2
3
4
5
6
7
8
9
Je kan dit herschrijven om ook de path-module te gebruiken.
const fs = require("fs");
const path = require("path");
const bestandsPad = path.join(__dirname, "bestand.txt");
fs.readFile(bestandsPad, "utf8", (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});
2
3
4
5
6
7
8
9
10
11
12
Lezen van folders
const fs = require("fs");
const path = require("path");
const mapPad = path.join(__dirname, "pad", "naar", "je", "map");
fs.readdir(mapPad, (err, bestanden) => {
if (err) {
console.error(err);
return;
}
console.log("Bestanden in de map:", bestanden);
});
2
3
4
5
6
7
8
9
10
11
12
Schrijven naar een bestand
const fs = require("fs");
const path = require("path");
const bestandsPad = path.join(__dirname, "output.txt");
const tekst = "Hallo, dit wordt naar het bestand geschreven!";
fs.writeFile(bestandsPad, tekst, (err) => {
if (err) {
console.error(err);
return;
}
console.log("Bestand geschreven!");
});
2
3
4
5
6
7
8
9
10
11
12
13
Asynchroon werken met het filesystem
De ‘fs’ (File System) module in Node.js biedt twee manieren om met bestanden om te gaan: de callback-based benadering ('fs') en de Promise-based benadering ('fs/promises'). Het onderscheid ligt in de manier waarop asynchrone operaties worden afgehandeld.
Bij de ‘fs’-module worden operaties vaak uitgevoerd met behulp van callbacks. Bijvoorbeeld, het lezen van een bestand met ‘fs’:
callback.js
const fs = require("fs");
fs.readFile("bestand.txt", "utf8", (err, data) => {
if (err) throw err;
console.log(data);
});
2
3
4
5
6
Aan de andere kant maakt de 'fs/promises'-module gebruik van Promises, wat een meer gestructureerde en leesbare asynchrone code mogelijk maakt.
promises.js
const fsp = require("fs/promises");
async function readFileAsync() {
try {
const data = await fsp.readFile("bestand.txt", "utf8");
console.log(data);
} catch (err) {
throw err;
}
}
readFileAsync();
2
3
4
5
6
7
8
9
10
11
12
# http
Laat toe om data verzenden over het Hyper Text Transfer Protocol (Afk. HTTP). Met deze HTTP module kunnen we een server maken dat luistert naar aanvragen (Eng. requests) naar deze server (met specifieke poort) en geeft een antwoord (Eng. response) terug aan de aanvrager.
const http = require("http");
http
.createServer(function (req, res) {
res.writeHead(200, { "Content-Type": "text/html" });
res.end("Hello World!");
})
.listen(8080);
2
3
4
5
6
7
8