Node.js install කරන විට, ඒ සමඟම අපේ programming කාර්යයන් පහසු කරවීම සඳහා built-in modules විශාල ප්රමාණයක් පැමිණේ. මේවා **Core Modules** ලෙස හැඳින්වේ. මෙම modules භාවිතා කිරීමට අපට අමතර කිසිවක් install කිරීමට අවශ්ය නැත. අපේ program එකට ඒවා `require()` function එක භාවිතයෙන් import කර ගැනීම පමණක් ප්රමාණවත්.
මෙම core modules මගින් file system එක සමඟ වැඩ කිරීමට, network connections සෑදීමට, operating system එකේ තොරතුරු ලබා ගැනීමට වැනි බොහෝ දේ සඳහා පහසුකම් සපයයි. මෙම පාඩමේදී අපි බහුලව භාවිතා වන core modules තුනක් වන fs, path, සහ http ගැන ඉගෙන ගනිමු.
fs
module එක මගින් අපට අපේ පරිගණකයේ ඇති files සහ folders සමඟ වැඩ කිරීමට, එනම් files සෑදීමට, කියවීමට, ලිවීමට, සහ මකා දැමීමට හැකියාව ලැබේ. මෙම module එකේ ඇති functions බොහෝමයක් non-blocking (asynchronous) සහ blocking (synchronous) යන ආකාර දෙකටම පවතී.
අපි හැමවිටම පාහේ Asynchronous ක්රමයට මුල්තැන දිය යුතුය.
අපි දැන් welcome.txt
නමින් file එකක් සාදා, එහි "Hello from file!" ලෙස සටහන් කර, එම file එක Node.js භාවිතයෙන් කියවා බලමු.
`welcome.txt` file එක:
Hello from file!
`app.js` file එක (Asynchronous):
const fs = require('fs'); // fs module එක import කර ගැනීම
// readFile function එක භාවිතයෙන් file එක කියවීම
// පළමු argument එක file path එක
// දෙවන argument එක character encoding එක ('utf8')
// තෙවන argument එක callback function එක
fs.readFile('./welcome.txt', 'utf8', (err, data) => {
// callback function එකට arguments දෙකක් ලැබේ: err (error) සහ data (file content)
if (err) {
// file එක කියවීමේදී error එකක් ඇති වුවහොත්...
console.error("Error reading the file:", err);
return;
}
// error එකක් නොමැති නම්, file එකේ content එක (data) print කිරීම
console.log("File content:", data);
});
console.log("Reading file..."); // මෙම පේළිය file එක කියවා අවසන් වීමට පෙර print වේ.
Output එක:
Reading file... File content: Hello from file!
මෙහිදී "Reading file..." යන පණිවිඩය පළමුව print වී, පසුව file එකේ content එක print වීමෙන් පෙනී යන්නේ fs.readFile
function එක non-blocking බවයි.
දැන් අපි output.txt
නමින් file එකක් සාදා, එයට Node.js මගින් content ලියා බලමු. File එක නොමැති නම්, මෙම function එක මගින් එය අලුතින් සාදනු ලැබේ. File එක දැනටමත් පවතී නම්, එහි ඇති පැරණි content එක මකා අලුත් content එක ලියනු ලැබේ.
`app.js` file එක (Asynchronous):
const fs = require('fs');
const contentToWrite = "This content was written by Node.js!";
// writeFile function එක භාවිතයෙන් file එකට ලිවීම
fs.writeFile('./output.txt', contentToWrite, 'utf8', (err) => {
if (err) {
console.error("Error writing to file:", err);
return;
}
console.log("File has been written successfully!");
});
console.log("Writing to file...");
මෙම code එක run කළ පසු, output.txt
නමින් file එකක් සෑදී, එහි "This content was written by Node.js!" යන text එක අඩංගු වනු ඇත.
විවිධ operating systems (Windows, macOS, Linux) වල file paths ලියන ආකාරය වෙනස් වේ (උදා: Windows වල `\` සහ macOS/Linux වල `/` භාවිතා වේ). path
module එක මගින් අපට OS එක කුමක් වුවත්, නිවැරදිව file paths හැසිරවීමට (manipulate) අවශ්ය functions සපයයි. මේ නිසා අපේ application එක ඕනෑම පරිසරයක ගැටලුවකින් තොරව ක්රියාත්මක වේ.
මෙම function එක මගින් path segments කිහිපයක් එකතු කර, OS එකට ගැලපෙන නිවැරදි path එකක් සාදා දේ.
const path = require('path');
const finalPath = path.join('users', 'john', 'files', 'notes.txt');
// macOS/Linux මත: 'users/john/files/notes.txt'
// Windows මත: 'users\john\files\notes.txt'
console.log(finalPath);
Path එකක අවසානයේ ඇති file එකේ හෝ folder එකේ නම ලබා දේ.
const path = require('path');
const filePath = '/users/john/files/notes.txt';
console.log(path.basename(filePath)); // Output: 'notes.txt'
File එකක extension එක (උදා: `.txt`, `.js`, `.html`) ලබා දේ.
const path = require('path');
const filePath = '/users/john/files/notes.txt';
console.log(path.extname(filePath)); // Output: '.txt'
Node.js හි ඇති බලවත්ම core modules වලින් එකක් වන http
module එක මගින්, අපට web server එකක් නිර්මාණය කර, web browser එකකින් එවන requests වලට responses යැවීමට හැකියාව ලැබේ. Express.js වැනි frameworks පවා තිරය පිටුපස භාවිතා කරන්නේ මෙම `http` module එකයි.
අපි දැන් "Hello World" ලෙස response එකක් browser එකට යවන සරලම server එකක් සාදා බලමු.
`server.js` file එක:
// 1. http module එක import කර ගැනීම
const http = require('http');
// 2. Server එක ක්රියාත්මක විය යුතු host සහ port එක නියම කිරීම
const hostname = '127.0.0.1'; // localhost
const port = 3000;
// 3. createServer() function එක භාවිතයෙන් server එකක් සෑදීම
// මෙම function එකට callback function එකක් ලබා දිය යුතු අතර,
// server එකට request එකක් එන සෑම අවස්ථාවකම එම callback එක ක්රියාත්මක වේ.
// callback function එකට arguments දෙකක් ලැබේ: req (request object) සහ res (response object)
const server = http.createServer((req, res) => {
// req object එකේ request එක පිළිබඳ තොරතුරු අඩංගු වේ (url, method, headers, etc.)
// res object එක භාවිතයෙන් අපි client (browser) එකට response එක යවමු.
// 4. Response Header එක set කිරීම
// Status code 200 යනු "OK" (සාර්ථකයි) යන්නයි.
// Content-Type එක 'text/plain' ලෙස යැවීමෙන් browser එකට මෙය සරල text එකක් බව දන්වයි.
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
// 5. Response එකේ body එක ලියා, connection එක අවසන් කිරීම
res.end('Hello, World!\n');
});
// 6. Server එකට සවන් දීමට (listen) සැලැස්වීම
// Server එක නියමිත port එකෙන් එන requests වලට සවන් දීමට පටන් ගනී.
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
node server.js
ඔබේ terminal එකේ "Server running at http://127.0.0.1:3000/" ලෙස පණිවිඩයක් දිස්වේවි.
දැන් ඔබේ web browser එක open කර, address bar එකේ http://localhost:3000 ලෙස type කර enter කරන්න. ඔබට browser window එකේ "Hello, World!" ලෙස දිස්වනු ඇත.
සුභ පැතුම්! ඔබ Node.js core modules පමණක් භාවිතයෙන් සාර්ථකව web server එකක් නිර්මාණය කර ඇත.