ශිෂ්ය සහ ගුරු උපකරණ පුවරු සහිත සම්පූර්ණ e-learning වෙබ් අඩවියක් Node.js සහ Express.js සමඟ නිර්මාණය කරමු.
මෙම නිබන්ධනය මගින්, e-learning platform එකක් නිර්මාණය කරන්නේ කෙසේදැයි පියවරෙන් පියවර කියාදෙනු ලැබේ. මෙහිදී අපි Node.js (JavaScript runtime), Express.js (web framework), MySQL (database), සහ Bootstrap (front-end framework) භාවිතා කරමු.
mysql2 package)bcryptjs (password hashing), express-session (sessions)පළමුව, Node.js ව්යාපෘතියක් ආරම්භ කර අවශ්ය packages ස්ථාපනය කරගනිමු.
1. නව ෆෝල්ඩරයක් සාදා එයට පිවිසෙන්න: mkdir e-learning-node && cd e-learning-node
2. Node.js ව්යාපෘතිය ආරම්භ කරන්න:
npm init -y
3. අවශ්ය packages ස්ථාපනය කරන්න:
npm install express mysql2 ejs bcryptjs express-session
අපගේ Node.js ව්යාපෘතිය සඳහා පහත පරිදි ෆෝල්ඩර සහ ගොනු ව්යුහයක් සකසා ගනිමු.
/e-learning-node/
|-- config/
| `-- db.js
|-- routes/
| |-- auth.js
| |-- student.js
| `-- teacher.js
|-- views/
| |-- partials/
| | |-- header.ejs
| | `-- footer.ejs
| |-- login.ejs
| |-- register.ejs
| |-- student_dashboard.ejs
| `-- teacher_dashboard.ejs
|-- public/
| `-- css/
| `-- style.css
|-- node_modules/
|-- package.json
|-- package-lock.json
`-- server.js
මෙම කොටස PHP නිබන්ධනයේ ආකාරයටම වේ. elearning_db නමින් දත්ත සමුදායක් සහ users, lessons, student_progress යන වගු නිර්මාණය කරගන්න.
-- පරිශීලකයන් (users) සඳහා වගුව
CREATE TABLE `users` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`full_name` VARCHAR(100) NOT NULL,
`email` VARCHAR(100) NOT NULL UNIQUE,
`password` VARCHAR(255) NOT NULL,
`user_type` ENUM('student', 'teacher') NOT NULL,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- (lessons සහ student_progress වගුද මෙලෙසම සාදන්න)
config/db.jsMySQL දත්ත සමුදාය සමඟ සම්බන්ධ වීමට connection pool එකක් සාදමු.
const mysql = require('mysql2');
const pool = mysql.createPool({
host: 'localhost',
user: 'root', // ඔබගේ username
password: '', // ඔබගේ password
database: 'elearning_db',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
// සිංහල භාෂාව සඳහා utf8mb4 භාවිතා කිරීම වඩාත් සුදුසුයි
pool.query('SET NAMES utf8mb4');
module.exports = pool.promise();
server.js (ප්රධාන ගොනුව)Express server එක සකසා, middleware වින්යාස කර, routes සම්බන්ධ කරමු.
const express = require('express');
const session = require('express-session');
const path = require('path');
const app = express();
const port = 3000;
// Middleware
app.use(express.urlencoded({ extended: true }));
app.use(express.static(path.join(__dirname, 'public')));
app.use(session({
secret: 'your-secret-key', // Use a strong secret key
resave: false,
saveUninitialized: true,
}));
// View Engine Setup
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));
// Routes
const authRoutes = require('./routes/auth');
app.use('/', authRoutes);
// (student and teacher routes will be added here)
app.listen(port, () => {
console.log(`Server is running on http://localhost:${port}`);
});
routes/auth.jsLogin, register, සහ logout ක්රියාවලි සඳහා routes මෙහි අඩංගු වේ.
const express = require('express');
const bcrypt = require('bcryptjs');
const db = require('../config/db');
const router = express.Router();
// GET /login
router.get('/login', (req, res) => {
res.render('login', { error: null });
});
// POST /login
router.post('/login', async (req, res) => {
const { email, password } = req.body;
try {
const [rows] = await db.query('SELECT * FROM users WHERE email = ?', [email]);
if (rows.length === 0) {
return res.render('login', { error: 'මෙම විද්යුත් තැපෑල ලියාපදිංචි වී නොමැත!' });
}
const user = rows[0];
const isMatch = await bcrypt.compare(password, user.password);
if (!isMatch) {
return res.render('login', { error: 'මුරපදය වැරදියි!' });
}
req.session.userId = user.id;
req.session.userType = user.user_type;
if (user.user_type === 'student') {
res.redirect('/student/dashboard');
} else {
res.redirect('/teacher/dashboard');
}
} catch (err) {
console.error(err);
res.status(500).send('Server Error');
}
});
// (register සහ logout routes මෙහි එක් කරන්න)
module.exports = router;
Dashboard වෙත පිවිසීමට පෙර පරිශීලකයා login වී ඇත්දැයි පරීක්ෂා කිරීමට middleware එකක් සාදමු.
// Middleware to check if user is authenticated
function isAuthenticated(req, res, next) {
if (req.session.userId) {
return next();
}
res.redirect('/login');
}
// Middleware to check user role
function isStudent(req, res, next) {
if (req.session.userType === 'student') {
return next();
}
res.status(403).send('Access Denied');
}
// (Create isTeacher middleware similarly)
routes/student.js
const express = require('express');
const router = express.Router();
// Import middleware functions
router.get('/dashboard', isAuthenticated, isStudent, (req, res) => {
res.render('student_dashboard');
});
module.exports = router;
මෙම නිබන්ධනය මගින් Node.js e-learning වෙබ් අඩවියක මූලික රාමුවක් ලබා දේ. මෙය තවදුරටත් දියුණු කිරීමට ඔබට හැකිය.
multer වැනි package එකක් භාවිතා කිරීම.