අපි 2 වන Module එකේදී Node.js හි `http` module එක භාවිතයෙන් web server එකක් සෑදුවා. එය සරල server එකක් සඳහා ප්රමාණවත් වුවත්, routes විශාල ප්රමාණයක්, database සම්බන්ධතා, user authentication වැනි සංකීර්ණ දේවල් සහිත විශාල application එකක් සෑදීමේදී `http` module එක පමණක් භාවිතා කිරීම ඉතා අපහසු සහ සංකීර්ණ වේ.
Express.js යනු මෙම ක්රියාවලිය ඉතා පහසු කරවන, Node.js සඳහා නිර්මාණය කරන ලද **web application framework** එකකි. එය Node.js මත ගොඩනගා ඇති අතර, web applications සහ APIs නිර්මාණය කිරීමට අවශ්ය මෙවලම් සහ features රාශියක් සපයයි.
හිතන්න ඔබ නිවසක් හදනවා කියා. Node.js හි `http` module එක භාවිතා කිරීම, ගඩොල්, සිමෙන්ති, වැලි වැනි අමුද්රව්ය පමණක් භාවිතා කර මුල සිටම නිවසක් හදනවා වැනිය. එය කළ හැකි වුවත්, ඉතා කාලයක් ගතවන සහ අපහසු කාර්යයකි.
Express.js භාවිතා කිරීම, පෙර-නිමි සැලසුමක් (blueprint), අත්තිවාරමක්, සහ බිත්ති වැනි කොටස් සහිතව නිවසක් හදනවා වැනිය. එය අපේ කාර්යය ඉතා වේගවත් සහ ක්රමවත් කරයි.
Express යනු බාහිර package එකක් නිසා, එය npm භාවිතයෙන් අපේ project එකට install කරගත යුතුය.
npm init -y
command එක මගින් `package.json` file එකක් සාදාගන්න.npm install express
මෙමගින් Express package එක download වී `node_modules` folder එකට එකතු වන අතර, `package.json` file එකේ `dependencies` යටතේ ලැයිස්තුගත වේ.
දැන් අපි `index.js` නමින් file එකක් සාදා, සරලම Express server එකක් ලියා බලමු.
// 1. Express module එක import කරගැනීම
const express = require('express');
// 2. Express application එකක් නිර්මාණය කරගැනීම
const app = express();
// 3. Server එක run විය යුතු port එක නියම කිරීම
const port = 3000;
// 4. GET request එකක් සඳහා route එකක් නිර්මාණය කිරීම
// '/' යනු homepage එකයි (root URL)
app.get('/', (req, res) => {
// res.send() මගින් browser එකට response එකක් යැවීම
res.send('Hello World with Express!');
});
// 5. Server එකට port එකෙන් listen කිරීමට සැලැස්වීම
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
Terminal එකේ node index.js
ලෙස run කර, ඔබේ browser එකෙන් http://localhost:3000 වෙත පිවිසෙන්න. "Hello World with Express!" ලෙස ඔබට දිස්වනු ඇත. `http` module එකට වඩා Express සමඟ server එකක් සෑදීම කොතරම් පහසුදැයි බලන්න!
Routing යනු application එකක්, client (browser) එකකින් එවන συγκεκριμένη URL path (endpoint) එකකට සහ HTTP method (GET, POST වැනි) එකකට ප්රතිචාර දක්වන ආකාරය තීරණය කිරීමයි.
app.METHOD(PATH, HANDLER)
අපි අපේ `index.js` file එකට තවත් routes කිහිපයක් එකතු කරමු.
const express = require('express');
const app = express();
const port = 3000;
// Homepage Route (GET request)
app.get('/', (req, res) => {
res.send('This is the Homepage!');
});
// About Page Route (GET request)
app.get('/about', (req, res) => {
res.send('This is the About Page.');
});
// API Route - Get list of users (GET request)
app.get('/api/users', (req, res) => {
// සාමාන්යයෙන් මෙතනදී database එකෙන් data අරන් JSON විදිහට යවනවා
res.json([{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]);
});
// Submit Form Route (POST request)
app.post('/submit-form', (req, res) => {
res.send('Your data has been submitted!');
});
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
දැන් ඔබට browser එකෙන් http://localhost:3000/about සහ http://localhost:3000/api/users වෙත පිවිසීමෙන් එම routes ක්රියා කරන ආකාරය දැකගත හැක. POST request එකක් browser එකෙන් කෙලින්ම යැවිය නොහැකි නිසා, ඒ සඳහා Postman වැනි මෙවලමක් අවශ්ය වේ (ඒ ගැන ඉදිරි පාඩම් වලදී කතා කරමු).
Middleware යනු Express හි ඇති ඉතාම වැදගත් සහ ප්රබල සංකල්පයකි. සරලවම කිවහොත්, Middleware යනු request එකක් අපේ route handler එකට (අවසාන ගමනාන්තයට) ළඟා වීමට පෙර, ඒ අතරමගදී ක්රියාත්මක වන functions වේ.
Middleware යනු කර්මාන්ත ශාලාවක ඇති assembly line එකක් වැනිය. අමුද්රව්යයක් (request) එක තැනකින් ඇතුළු වී, විවිධ ස්ථාන (middleware functions) හරහා ගොස්, එක් එක් ස්ථානයේදී යම් යම් වෙනස්කම් වලට භාජනය වී, අවසානයේ නිමි භාණ්ඩය (response) ලෙස එළියට පැමිණේ.
එක් එක් middleware function එකට request එක පරීක්ෂා කිරීමට, එය වෙනස් කිරීමට, හෝ request එක ඉදිරියට යැවීම නවතා error එකක් යැවීමට පවා හැකිය.
සෑම middleware function එකකටම arguments 3ක් ලැබේ:
`next()` function එක ඉතා වැදගත් වේ. middleware function එකක වැඩ අවසන් වූ පසු, `next()` call නොකළහොත්, request එක එතන නැවතී, application එක freeze වනු ඇත.
අපේ server එකට එන සෑම request එකකම method එක (GET, POST) සහ URL එක console එකේ log කරන සරල middleware එකක් ලියා බලමු.
const express = require('express');
const app = express();
const port = 3000;
// Custom Logger Middleware
const logger = (req, res, next) => {
console.log(`Request Method: ${req.method}, Request URL: ${req.originalUrl}`);
next(); // ඊළඟ middleware එකට හෝ route handler එකට control එක pass කිරීම
};
// app.use() මගින් middleware එක application එකට යෙදීම
// මෙම middleware එක, මෙයට පහළින් ඇති සියලුම routes සඳහා ක්රියාත්මක වේ.
app.use(logger);
// Routes
app.get('/', (req, res) => {
res.send('Homepage');
});
app.get('/about', (req, res) => {
res.send('About Page');
});
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
දැන් server එක run කර, browser එකෙන් http://localhost:3000/ සහ http://localhost:3000/about වෙත පිවිසෙන්න. ඔබේ terminal එකේ පහත ආකාරයේ log පණිවිඩ දිස්වනු ඇත:
Request Method: GET, Request URL: / Request Method: GET, Request URL: /about
Express හි `express.json()`, `express.urlencoded()` වැනි built-in middleware මෙන්ම, `cors`, `helmet` වැනි third-party middleware ද බහුලව භාවිතා වේ. ඒවා ගැන අපි ඉදිරියේදී ඉගෙන ගනිමු.