ExpressJS অ্যাপ্লিকেশন তৈরি করার জন্য কয়েকটি মৌলিক কনফিগারেশন রয়েছে, যা অ্যাপ্লিকেশনের কার্যক্ষমতা, রাউটিং, মিডলওয়্যার, এবং অন্যান্য ফিচারের জন্য গুরুত্বপূর্ণ। এই কনফিগারেশনগুলি অ্যাপের কার্যপ্রণালী সহজ এবং দ্রুত করতে সাহায্য করে।
১. Express অ্যাপ্লিকেশন শুরু করা
ExpressJS অ্যাপ তৈরি করতে প্রথমেই আপনাকে Express মডিউল ইমপোর্ট করে একটি অ্যাপ্লিকেশন ইনস্ট্যান্স তৈরি করতে হবে। এটি app.js বা যেকোনো ফাইলে করা যেতে পারে।
const express = require('express');
const app = express();
এখানে:
express: ExpressJS মডিউল, যা ফ্রেমওয়ার্কের কার্যক্রম পরিচালনা করে।app: Express অ্যাপ্লিকেশন ইনস্ট্যান্স, যা সার্ভার এবং রাউটিং কনফিগারেশনের জন্য ব্যবহৃত হয়।
২. পোর্ট কনফিগারেশন
অ্যাপ্লিকেশনটি কোন পোর্টে চলবে তা নির্ধারণ করতে app.listen() ব্যবহার করা হয়। সাধারণত, ডেভেলপমেন্ট পরিবেশে 3000 পোর্ট ব্যবহার করা হয়, তবে প্রোডাকশন পরিবেশে অন্য পোর্টও ব্যবহার করা যেতে পারে।
const port = process.env.PORT || 3000; // প্রোডাকশন বা ডেভেলপমেন্ট পোর্ট
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
এখানে:
process.env.PORT: এটি পরিবেশ ভেরিয়েবল থেকে পোর্ট গ্রহণ করে, যদি সেটি উপলব্ধ থাকে (যেমন প্রোডাকশন পরিবেশে প্ল্যাটফর্মের দেওয়া পোর্ট)।3000: ডিফল্ট পোর্ট, যা সাধারণত ডেভেলপমেন্ট পরিবেশে ব্যবহার হয়।
৩. মিডলওয়্যার কনফিগারেশন
ExpressJS এর সবচেয়ে শক্তিশালী বৈশিষ্ট্যগুলোর একটি হলো মিডলওয়্যার। মিডলওয়্যার হলো ফাংশন যা HTTP রিকোয়েস্ট আসার আগে বা পরে এক্সিকিউট হয় এবং রিকোয়েস্ট/রেসপন্স পদ্ধতির মধ্যে কাজ করে।
৩.১. স্ট্যাটিক ফাইল সরবরাহ
ExpressJS অ্যাপ্লিকেশনে স্ট্যাটিক ফাইল (যেমন CSS, JavaScript, ইমেজ) সরবরাহ করতে express.static() মিডলওয়্যার ব্যবহার করা হয়।
app.use(express.static('public'));
এখানে:
express.static('public'):publicফোল্ডার থেকে স্ট্যাটিক ফাইল সরবরাহ করতে সাহায্য করে।
৩.২. JSON এবং URL-এনকোডেড রিকোয়েস্ট পার্স করা
ExpressJS-এ JSON বা URL-এনকোডেড ডেটা রিকোয়েস্ট হিসেবে গ্রহণ করতে express.json() এবং express.urlencoded() মিডলওয়্যার ব্যবহার করা হয়।
app.use(express.json()); // JSON ডেটা পার্স করার জন্য
app.use(express.urlencoded({ extended: true })); // URL-এনকোডেড ডেটা পার্স করার জন্য
এখানে:
express.json(): JSON ডেটাকে রিকোয়েস্ট বডি থেকে পার্স করে।express.urlencoded(): URL-এনকোডেড ডেটা পার্স করে, যেমন HTML ফর্ম থেকে আসা ডেটা।
৪. রাউট কনফিগারেশন
ExpressJS-এ রাউটিং খুবই গুরুত্বপূর্ণ। রাউট কনফিগারেশনে HTTP মেথডের সাথে URL পাথ মেলানো হয়।
app.get('/', (req, res) => {
res.send('Hello World!');
});
এখানে:
app.get():GETরিকোয়েস্টের জন্য রাউট কনফিগারেশন। URL পাথ/(হোম পেজ) এ গেলে এই রাউটটি কার্যকর হবে।reqএবংres: রিকোয়েস্ট এবং রেসপন্স অবজেক্ট যা রিকোয়েস্টের ডেটা এবং রেসপন্স প্রদান করে।
এছাড়া, বিভিন্ন HTTP মেথডের জন্য আলাদা আলাদা রাউট কনফিগার করা যায়, যেমন:
app.post():POSTরিকোয়েস্টের জন্যapp.put():PUTরিকোয়েস্টের জন্যapp.delete():DELETEরিকোয়েস্টের জন্য
৫. ভিউ ইঞ্জিন কনফিগারেশন
ExpressJS বিভিন্ন ভিউ ইঞ্জিন সাপোর্ট করে যেমন EJS, Pug, Handlebars ইত্যাদি। ভিউ ইঞ্জিন কনফিগার করার জন্য app.set() ব্যবহার করা হয়।
app.set('view engine', 'ejs');
এখানে:
view engine: ExpressJS অ্যাপ্লিকেশনে টেমপ্লেট ইঞ্জিন কনফিগার করা হয়। এখানেejsব্যবহার করা হয়েছে।app.set(): Express-এ কনফিগারেশন সেট করতে ব্যবহৃত হয়।
৬. রাউট ফাইল ব্যবস্থাপনা
আপনার অ্যাপ্লিকেশনটি বড় হলে, রাউটগুলোকে আলাদা আলাদা ফাইলে ভাগ করা ভাল। উদাহরণস্বরূপ, আপনি routes/ ফোল্ডার তৈরি করে সেখানে রাউট ফাইল সংরক্ষণ করতে পারেন এবং এগুলো app.js ফাইলে ব্যবহার করতে পারেন।
৬.১. রাউট ফাইল তৈরি করা
routes/index.js ফাইলে রাউট সংজ্ঞায়িত করা হয়:
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
res.send('Welcome to the Home Page');
});
module.exports = router;
৬.২. রাউট ইমপোর্ট করা
অ্যাপ ফাইলে রাউট ইমপোর্ট করে ব্যবহার করা হয়:
const indexRouter = require('./routes/index');
app.use('/', indexRouter);
এটি রুট URL / এর জন্য index.js ফাইলের রাউট ব্যবহার করবে।
৭. এরর হ্যান্ডলিং
ExpressJS এ এরর হ্যান্ডলিং খুবই সহজ। আপনি একাধিক এরর হ্যান্ডলার মিডলওয়্যার ব্যবহার করতে পারেন।
app.use((req, res, next) => {
res.status(404).send('Page Not Found');
});
এখানে:
- যদি কোনো রিকোয়েস্টের জন্য কোনো রাউট না পাওয়া যায়, তাহলে 404 এরর রেসপন্স দেওয়া হবে।
সারাংশ
ExpressJS অ্যাপ্লিকেশন তৈরি করার সময় বিভিন্ন কনফিগারেশন পদ্ধতি ব্যবহার করা হয়, যেমন মিডলওয়্যার, পোর্ট কনফিগারেশন, রাউটিং, ভিউ ইঞ্জিন সেটআপ, এবং এরর হ্যান্ডলিং। এসব কনফিগারেশনের মাধ্যমে একটি স্কেলেবল, শক্তিশালী এবং প্রোডাকশন-রেডি অ্যাপ্লিকেশন তৈরি করা সম্ভব।
ExpressJS অ্যাপ্লিকেশন তৈরি করার সময়, app.js বা server.js ফাইলটি মূল অ্যাপ্লিকেশনের এন্ট্রি পয়েন্ট হিসেবে কাজ করে। এই ফাইলে Express অ্যাপ্লিকেশন কনফিগার করা হয়, রাউটগুলি সংজ্ঞায়িত করা হয়, এবং অ্যাপ্লিকেশনটি একটি নির্দিষ্ট পোর্টে চলতে শুরু করে।
১. app.js ফাইল তৈরি করা
app.js ফাইলটি আপনার Express অ্যাপ্লিকেশনটির প্রধান ফাইল। এখানে ExpressJS অ্যাপ্লিকেশনটি কনফিগার করা হয় এবং সার্ভারটি চালু করা হয়। সাধারণত এই ফাইলটি অ্যাপ্লিকেশনের সমস্ত রাউট, মিডলওয়্যার এবং কনফিগারেশন ধারণ করে।
১.১. app.js ফাইলের মূল স্ট্রাকচার
const express = require('express');
const app = express();
const port = 3000;
// স্ট্যাটিক ফাইল সেবা
app.use(express.static('public'));
// রুট রাউট (Home Page)
app.get('/', (req, res) => {
res.send('Hello World!');
});
// একটি সিম্পল API রাউট
app.get('/api', (req, res) => {
res.json({ message: 'Welcome to Express API' });
});
// সার্ভার চালু করা
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
ব্যাখ্যা:
const express = require('express');: Express ফ্রেমওয়ার্ক ইমপোর্ট করা হচ্ছে।const app = express();: Express অ্যাপ্লিকেশন তৈরি করা হচ্ছে।app.get('/', (req, res) => { ... }): রুট URL (/) এ গেলে "Hello World!" দেখানো হবে।app.get('/api', (req, res) => { ... }):/apiরাউটে একটি সিম্পল JSON রেসপন্স পাঠানো হচ্ছে।app.listen(port, () => { ... }): অ্যাপ্লিকেশনটি 3000 পোর্টে চালু হবে এবং একটি মেসেজ প্রিন্ট হবে।
২. সার্ভার ফাইল তৈরি করা (অথবা server.js)
অনেকে server.js নামে একটি আলাদা ফাইল তৈরি করে সার্ভারটি চালু করতে prefer করে, যা মূল app.js থেকে ভিন্ন থাকে। এই ফাইলটি শুধুমাত্র সার্ভার রিলেটেড কোড ধারণ করে এবং অ্যাপ্লিকেশন লজিক app.js বা অন্যান্য ফাইলগুলোতে রাখা হয়।
২.১. server.js ফাইলের উদাহরণ
const app = require('./app'); // app.js ফাইল থেকে অ্যাপ ইমপোর্ট করা
const port = 3000;
// সার্ভার চালু করা
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
এই ক্ষেত্রে, app.js শুধু অ্যাপ্লিকেশন কনফিগারেশন ধারণ করে এবং server.js ফাইলটি সেটি চালু করার জন্য ব্যবহৃত হয়।
২.২. app.js এর স্ট্রাকচার পরিবর্তন (যদি আপনি সার্ভার ফাইল আলাদা করেন)
app.js এ এখন সার্ভার চালু করার অংশ থাকবে না, কারণ তা server.js-এ চলে যাবে। আপনি শুধু অ্যাপ্লিকেশন কনফিগারেশন রাখতে পারেন।
const express = require('express');
const app = express();
// স্ট্যাটিক ফাইল সেবা
app.use(express.static('public'));
// রুট রাউট (Home Page)
app.get('/', (req, res) => {
res.send('Hello World!');
});
// একটি সিম্পল API রাউট
app.get('/api', (req, res) => {
res.json({ message: 'Welcome to Express API' });
});
module.exports = app; // অ্যাপ্লিকেশনটি এক্সপোর্ট করা
৩. ফাইল স্ট্রাকচার উদাহরণ
যদি আপনি app.js এবং server.js আলাদা করেন, আপনার ফোল্ডার স্ট্রাকচার এই রকম হতে পারে:
my-express-app/
│
├── node_modules/ # ইনস্টল হওয়া প্যাকেজ
├── public/ # স্ট্যাটিক ফাইল (যেমন CSS, JS)
├── routes/ # রাউট ফাইল
│ └── index.js # রাউট ফাইল
├── app.js # অ্যাপ্লিকেশন কনফিগারেশন
├── server.js # সার্ভার চালু করার ফাইল
├── package.json # প্যাকেজ কনফিগারেশন
└── .gitignore # গিট এর জন্য অগ্রাহ্যযোগ্য ফাইল
৪. রান টাইমে অ্যাপ চালানো
এখন, server.js ফাইলটি চালাতে এই কমান্ডটি ব্যবহার করুন:
node server.js
এটি আপনার Express অ্যাপ্লিকেশনটি চালু করবে এবং আপনি http://localhost:3000 এ গিয়ে অ্যাপ্লিকেশনটি দেখতে পারবেন।
সারাংশ
ExpressJS অ্যাপ্লিকেশন তৈরির সময়, app.js বা server.js ফাইলের মধ্যে আপনার অ্যাপ্লিকেশনের কনফিগারেশন এবং সার্ভার চালু করার কোড থাকবে। আপনি চাইলে app.js এবং server.js আলাদা করে রাখতে পারেন, যাতে অ্যাপ্লিকেশন লজিক এবং সার্ভার কনফিগারেশন পরিষ্কারভাবে আলাদা থাকে। এই দুটি ফাইলের মাধ্যমে আপনার Express অ্যাপ্লিকেশন তৈরি এবং চালানো সম্ভব।
ExpressJS একটি ফাস্ট, ফ্লেক্সিবল এবং মিনি মালফাংশনাল ফ্রেমওয়ার্ক যা মিডলওয়্যার এবং রাউটিং কনফিগারেশনের মাধ্যমে ওয়েব অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে। এখানে আমরা Middleware এবং Routing কনফিগারেশন নিয়ে বিস্তারিত আলোচনা করব।
১. Middleware কনফিগারেশন
Middleware হল একটি ফাংশন যা HTTP রিকোয়েস্ট এবং রেসপন্সের মাঝে প্রসেসিং করে। এটি রিকোয়েস্ট অবজেক্ট (req), রেসপন্স অবজেক্ট (res), এবং পরবর্তী middleware বা রাউট হ্যান্ডলারকে (next) অ্যাক্সেস প্রদান করে।
ExpressJS-এ মিডলওয়্যার অনেক কাজ করতে পারে, যেমন:
- রিকোয়েস্টের ভ্যালিডেশন করা
- লগিং
- অথেন্টিকেশন
- রিকোয়েস্টের বডি পার্স করা (যেমন JSON, URL-encoded)
- রেসপন্স কাস্টমাইজ করা
১.১. বেসিক Middleware ব্যবহার
const express = require('express');
const app = express();
const port = 3000;
// সাধারণ লগিং মিডলওয়্যার
app.use((req, res, next) => {
console.log(`${req.method} request made to ${req.url}`);
next(); // পরবর্তী মিডলওয়্যার বা রাউট হ্যান্ডলারকে কল করুন
});
// বেসিক রাউট
app.get('/', (req, res) => {
res.send('Hello, Express with Middleware!');
});
// সার্ভার শুরু
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
এখানে, প্রতিটি রিকোয়েস্টের লগ দেখানো হবে। next() কল করার মাধ্যমে অ্যাপ্লিকেশন পরবর্তী মিডলওয়্যার বা রাউট হ্যান্ডলারকে প্রসেস করতে বলে।
১.২. বডি পার্সিং মিডলওয়্যার
ExpressJS-এ ইনপুট ডেটা পার্স করার জন্য মিডলওয়্যার ব্যবহার করা হয়। এটি বিশেষ করে POST রিকোয়েস্টে কার্যকর।
// JSON বডি পার্স করা
app.use(express.json());
// URL-encoded বডি পার্স করা
app.use(express.urlencoded({ extended: true }));
১.৩. Error Handling Middleware
এছাড়া, ExpressJS-এ কোনো ত্রুটি ঘটলে সেই ত্রুটি হ্যান্ডল করার জন্য একটি স্পেসিফিক মিডলওয়্যার ব্যবহার করা যায়:
// Error handling middleware
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something went wrong!');
});
এটি সব মিডলওয়্যার এবং রাউট হ্যান্ডলারের পরে রাখা উচিত। যখন কোনো ত্রুটি ঘটবে, এটি err অবজেক্টটি ক্যাচ করবে এবং একটি 500 স্ট্যাটাস কোড সহ ব্যবহারকারীকে রেসপন্স পাঠাবে।
২. Routing কনফিগারেশন
Routing হল রিকোয়েস্টের URL পাথ এবং HTTP মেথডের ভিত্তিতে নির্দিষ্ট ফাংশন বা মিডলওয়্যার চালানো। ExpressJS খুবই সহজে রাউট কনফিগার করার সুযোগ দেয়।
২.১. বেসিক Routing
ExpressJS-এ রাউট কনফিগার করার জন্য .get(), .post(), .put(), .delete() ইত্যাদি HTTP মেথড ব্যবহার করা হয়।
// GET রাউট
app.get('/', (req, res) => {
res.send('Welcome to the Home Page');
});
// POST রাউট
app.post('/submit', (req, res) => {
res.send('Form Submitted');
});
// PUT রাউট
app.put('/update', (req, res) => {
res.send('Data Updated');
});
// DELETE রাউট
app.delete('/delete', (req, res) => {
res.send('Data Deleted');
});
২.২. প্যারামিটার সহ Routing
ExpressJS রাউটের মধ্যে ডাইনামিক প্যারামিটার ব্যবহারের সুযোগ দেয়, যা : দিয়ে নির্দিষ্ট করা হয়।
// প্যারামিটার সহ রাউট
app.get('/user/:id', (req, res) => {
const userId = req.params.id;
res.send(`User ID: ${userId}`);
});
এখানে :id হল একটি প্যারামিটার, এবং আপনি req.params.id এর মাধ্যমে এই প্যারামিটারটির মান অ্যাক্সেস করতে পারবেন।
২.৩. Query String সহ Routing
Query strings URL-এ প্যারামিটার হিসেবে পাঠানো হয়। ExpressJS এই query string values কে req.query দিয়ে অ্যাক্সেস করতে সাহায্য করে।
// Query String সহ রাউট
app.get('/search', (req, res) => {
const query = req.query.q; // URL: /search?q=example
res.send(`Search Query: ${query}`);
});
২.৪. Multiple Routes Handling
একই রাউটের জন্য একাধিক HTTP মেথড হ্যান্ডল করা যেতে পারে:
app.route('/user')
.get((req, res) => {
res.send('Get User');
})
.post((req, res) => {
res.send('Create User');
})
.put((req, res) => {
res.send('Update User');
})
.delete((req, res) => {
res.send('Delete User');
});
২.৫. Nested Routes (Sub-routing)
ExpressJS-এ রাউটগুলিকে নেস্ট করা সম্ভব, যাতে বিভিন্ন ফাংশন বা ফিচারের জন্য পৃথক রাউট ফাইল তৈরি করা যায়।
const express = require('express');
const app = express();
const userRouter = express.Router();
// /user রাউটের জন্য সাব-রাউট
userRouter.get('/', (req, res) => {
res.send('Get User');
});
userRouter.post('/', (req, res) => {
res.send('Create User');
});
// /user রাউটের সাথে সাব-রাউট যুক্ত করা
app.use('/user', userRouter);
// সার্ভার শুরু
app.listen(3000, () => {
console.log('Server running on port 3000');
});
এখানে /user রাউটটি userRouter এর মাধ্যমে পরিচালিত হচ্ছে, এবং আপনি এটি সহজেই মডুলার আর্কিটেকচারে ভাগ করতে পারেন।
সারাংশ
Middleware এবং Routing হল ExpressJS অ্যাপ্লিকেশন ডেভেলপমেন্টের মূল উপাদান। মিডলওয়্যার রিকোয়েস্ট এবং রেসপন্সের মধ্যে প্রসেসিং করার জন্য ব্যবহৃত হয়, যেখানে রাউটিং রিকোয়েস্টের URL এবং HTTP মেথডের ভিত্তিতে সঠিক ফাংশন চালায়। মিডলওয়্যার ব্যবহার করে বিভিন্ন ফাংশন যেমন লগিং, বডি পার্সিং, অথেন্টিকেশন, এবং ত্রুটি হ্যান্ডলিং করা সম্ভব। রাউটিং কনফিগারেশন দ্বারা, আপনি অ্যাপ্লিকেশনে বিভিন্ন HTTP রিকোয়েস্ট হ্যান্ডল করতে পারবেন, ডাইনামিক প্যারামিটার এবং কুইরি স্ট্রিং ব্যবহার করে ডেটা অ্যাক্সেস করতে পারবেন, এবং সাব-রাউট তৈরি করে কোডকে মডুলার রাখতে পারবেন।
ExpressJS-এ স্ট্যাটিক ফাইল সার্ভ করা খুবই সহজ। স্ট্যাটিক ফাইলের মধ্যে CSS, JavaScript, ইমেজ, ফন্ট, অথবা অন্য যেকোনো ফাইল অন্তর্ভুক্ত থাকতে পারে, যা আপনি সরাসরি ব্রাউজারে প্রদর্শন করতে চান। ExpressJS এ স্ট্যাটিক ফাইল সার্ভ করার জন্য express.static মিডলওয়্যার ব্যবহার করা হয়।
১. স্ট্যাটিক ফাইল সার্ভ করার জন্য ফোল্ডার তৈরি করা
প্রথমে একটি ফোল্ডার তৈরি করুন যেখানে আপনি আপনার স্ট্যাটিক ফাইলগুলো রাখবেন। সাধারণত এই ফোল্ডারটির নাম public রাখা হয়, কিন্তু আপনি আপনার প্রয়োজন অনুযায়ী অন্য নামও ব্যবহার করতে পারেন।
উদাহরণ:
my-express-app/
├── public/
│ ├── css/
│ │ └── style.css
│ ├── js/
│ │ └── script.js
│ └── images/
│ └── logo.png
├── app.js
└── package.json
এই উদাহরণে, public ফোল্ডারে css/, js/, এবং images/ নামের সাবফোল্ডার রয়েছে, যেখানে যথাক্রমে CSS, JavaScript, এবং ইমেজ ফাইল রাখা হয়েছে।
২. express.static মিডলওয়্যার ব্যবহার করা
ExpressJS-এ স্ট্যাটিক ফাইল সার্ভ করার জন্য express.static মিডলওয়্যার ব্যবহার করতে হবে। এটি আপনার অ্যাপ্লিকেশনের স্ট্যাটিক ফোল্ডারকে ক্লায়েন্টের কাছে প্রকাশ করে।
app.js ফাইলের উদাহরণ:
const express = require('express');
const app = express();
const port = 3000;
// স্ট্যাটিক ফাইল সরবরাহ করতে express.static ব্যবহার করা
app.use(express.static('public'));
// রুট রাউট
app.get('/', (req, res) => {
res.send('Hello, Express with Static Files!');
});
// সার্ভার শুরু করুন
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
এখানে app.use(express.static('public')); এই লাইনে আমরা public ফোল্ডারটি স্ট্যাটিক ফাইল সরবরাহের জন্য ব্যবহার করছি। এর মানে হলো, public ফোল্ডারে যেকোনো ফাইলকে সরাসরি ব্রাউজারে অ্যাক্সেস করা যাবে।
৩. স্ট্যাটিক ফাইল অ্যাক্সেস করা
এখন, আপনি স্ট্যাটিক ফাইলগুলোকে সরাসরি URL দিয়ে ব্রাউজারে অ্যাক্সেস করতে পারবেন। উদাহরণস্বরূপ:
- CSS ফাইল:
http://localhost:3000/css/style.css - JavaScript ফাইল:
http://localhost:3000/js/script.js - ইমেজ ফাইল:
http://localhost:3000/images/logo.png
এটি আপনার স্ট্যাটিক ফাইলগুলোকে ক্লায়েন্টদের কাছে সহজেই সরবরাহ করতে সাহায্য করবে।
৪. HTML ফাইলে স্ট্যাটিক ফাইল লিঙ্ক করা
এখন, আপনার HTML ফাইলগুলোতে স্ট্যাটিক ফাইলগুলি যুক্ত করতে হবে। ধরুন আপনার একটি index.html ফাইল আছে এবং আপনি এতে CSS ও JavaScript ফাইল যুক্ত করতে চান।
উদাহরণ: views/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Express App</title>
<link rel="stylesheet" href="/css/style.css"> <!-- স্ট্যাটিক CSS ফাইল লিঙ্ক করা -->
</head>
<body>
<h1>Welcome to My Express App</h1>
<img src="/images/logo.png" alt="Logo"> <!-- স্ট্যাটিক ইমেজ ফাইল লিঙ্ক করা -->
<script src="/js/script.js"></script> <!-- স্ট্যাটিক JS ফাইল লিঙ্ক করা -->
</body>
</html>
এখানে, link, img, এবং script ট্যাগের মাধ্যমে CSS, ইমেজ এবং JavaScript ফাইলগুলো ব্রাউজারে লোড হবে। URL-এর মাধ্যমে /css/style.css, /images/logo.png, এবং /js/script.js ফাইলগুলো ExpressJS এর public ফোল্ডার থেকে সরবরাহ করা হবে।
৫. ভিন্ন সাব-ফোল্ডার থেকে ফাইল সার্ভ করা
আপনি চাইলে একাধিক সাব-ফোল্ডার থেকেও স্ট্যাটিক ফাইল সরবরাহ করতে পারেন। উদাহরণস্বরূপ, আপনি যদি আলাদা সাবফোল্ডার assets তৈরি করেন, তবে নিম্নলিখিতভাবে সেটি করতে পারেন:
app.use(express.static('assets'));
এখন, আপনি assets/ ফোল্ডারের যে কোনো ফাইল ব্রাউজারে অ্যাক্সেস করতে পারবেন।
৬. বিশেষ স্ট্যাটিক ফাইল রাউটিং
আপনি যদি স্ট্যাটিক ফাইলগুলোর জন্য বিশেষ রাউটিং করতে চান, যেমন /static রাউট ব্যবহার করে স্ট্যাটিক ফাইল সরবরাহ, তবে আপনি এইভাবে করতে পারেন:
app.use('/static', express.static('public'));
এখন, স্ট্যাটিক ফাইলগুলোকে /static/css, /static/js, এবং /static/images রুটের মাধ্যমে অ্যাক্সেস করা যাবে।
সারাংশ
ExpressJS-এ স্ট্যাটিক ফাইল সরবরাহ করা খুবই সহজ। express.static মিডলওয়্যার ব্যবহার করে আপনি যেকোনো ফোল্ডারকে স্ট্যাটিক ফাইলের জন্য সরবরাহ করতে পারবেন। CSS, JavaScript, ইমেজ ইত্যাদি ফাইলগুলোকে আপনার অ্যাপ্লিকেশনে অন্তর্ভুক্ত করতে public ফোল্ডারে রেখে ব্রাউজারে সহজে অ্যাক্সেস করা যায়। এই সুবিধাটি ব্যবহার করে আপনি আপনার ওয়েব অ্যাপ্লিকেশন বা সাইটে প্রয়োজনীয় সমস্ত স্ট্যাটিক রিসোর্স সহজে ব্যবহার করতে পারবেন।
ExpressJS অ্যাপ্লিকেশন তৈরি করার সময়, এক্সপ্রেস এবং অন্যান্য ডিপেনডেন্সির কনফিগারেশন এবং পরিবেশ (environments) ম্যানেজ করা গুরুত্বপূর্ণ। পরিবেশের ওপর ভিত্তি করে অ্যাপ্লিকেশনের আচরণ পরিবর্তন করা, যেমন ডেভেলপমেন্ট (development), প্রোডাকশন (production), বা টেস্টিং (testing) পরিবেশে আলাদা কনফিগারেশন থাকা, সিস্টেমের কার্যকারিতা উন্নত করতে সাহায্য করে। এই ক্ষেত্রে configuration files এবং environment variables ব্যবস্থাপনা একটি গুরুত্বপূর্ণ ভূমিকা পালন করে।
১. ExpressJS অ্যাপ্লিকেশনে Environment সেটআপ
প্রথমে, পরিবেশের ধারণা এবং এটি ব্যবস্থাপনা করার পদ্ধতি বুঝে নেওয়া জরুরি। পরিবেশ (environment) সাধারণত দুটি ধরনের হতে পারে:
- Development: ডেভেলপমেন্ট পর্যায়ে অ্যাপ্লিকেশন চালানোর সময় ব্যবহৃত সেটিংস। এখানে সাধারণত লগিং এবং ডিবাগিং সক্ষম করা থাকে।
- Production: প্রোডাকশন পরিবেশে অ্যাপ্লিকেশন চালানোর জন্য সেটিংস। এখানে সাধারণত নিরাপত্তা এবং পারফরম্যান্স অপটিমাইজ করা হয়।
১.১. NODE_ENV Environment Variable
ExpressJS অ্যাপ্লিকেশনে পরিবেশ পরিচালনা করতে সবচেয়ে সাধারণ উপায় হল NODE_ENV পরিবেশ ভেরিয়েবল ব্যবহার করা। এটি সাধারণত দুটি মান নিতে পারে: development অথবা production।
NODE_ENV সেট করা হয়:
- ডেভেলপমেন্ট পরিবেশের জন্য:
NODE_ENV=development - প্রোডাকশন পরিবেশের জন্য:
NODE_ENV=production
আপনি পরিবেশ ভেরিয়েবলটি কমান্ড লাইনে বা কোডের মধ্যে সেট করতে পারেন।
১.২. NODE_ENV এর মাধ্যমে Environment নির্ধারণ
const express = require('express');
const app = express();
if (process.env.NODE_ENV === 'production') {
console.log('Running in production mode');
} else {
console.log('Running in development mode');
}
app.listen(3000, () => {
console.log('Server is running...');
});
উপরের কোডে process.env.NODE_ENV এর মান চেক করা হচ্ছে। যদি এটি production হয়, তবে প্রোডাকশন সম্পর্কিত কনফিগারেশন চালু হবে, আর যদি এটি ডেভেলপমেন্ট হয়, তবে ডেভেলপমেন্ট কনফিগারেশন কার্যকর হবে।
২. Configuration Files ব্যবস্থাপনা
ExpressJS অ্যাপ্লিকেশনে কনফিগারেশন ফাইল ব্যবহার করে বিভিন্ন পরিবেশের জন্য আলাদা আলাদা সেটিংস রাখাটা খুবই প্রয়োজনীয়। এই কাজের জন্য, সাধারণত একটি কনফিগারেশন ফাইল বা ফোল্ডার তৈরি করা হয় যেখানে বিভিন্ন পরিবেশের কনফিগারেশন রাখা যায়।
২.১. .env ফাইল ব্যবহার
একটি .env ফাইল ব্যবহার করে আপনি অ্যাপ্লিকেশনের জন্য প্রয়োজনীয় পরিবেশ ভেরিয়েবল সেট করতে পারেন। এতে ডাটাবেজ ইউজারনেম, পাসওয়ার্ড, অ্যাপ্লিকেশন কীগুলো ইত্যাদি সংরক্ষণ করা হয়।
.env ফাইলের উদাহরণ:
NODE_ENV=development
PORT=3000
DATABASE_URL=mongodb://localhost:27017/myapp
SECRET_KEY=mysecretkey
এই .env ফাইলটি প্রকল্পের মূল ডিরেক্টরিতে রাখতে হয়। এরপর, dotenv প্যাকেজটি ব্যবহার করে আপনি এই ভেরিয়েবলগুলো অ্যাপ্লিকেশনে লোড করতে পারেন।
২.২. dotenv প্যাকেজ ব্যবহার
dotenv প্যাকেজটি ইনস্টল করতে:
npm install dotenv
এরপর, আপনার app.js ফাইলে এইভাবে dotenv ব্যবহার করুন:
require('dotenv').config();
const express = require('express');
const app = express();
const port = process.env.PORT || 3000;
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});
এখানে, dotenv.config() ব্যবহার করে .env ফাইলের সমস্ত ভেরিয়েবল লোড করা হচ্ছে। এরপর, আপনি process.env.VARIABLE_NAME এর মাধ্যমে ভেরিয়েবলগুলি অ্যাক্সেস করতে পারবেন।
২.৩. আলাদা পরিবেশের জন্য আলাদা কনফিগ ফাইল
কিছু অ্যাপ্লিকেশনে, আপনি আলাদা আলাদা কনফিগ ফাইল তৈরি করতে পারেন যা ডেভেলপমেন্ট এবং প্রোডাকশন পরিবেশের জন্য কনফিগারেশন রাখবে।
config.js:
const config = {
development: {
db: 'mongodb://localhost:27017/dev_db',
secretKey: 'dev_secret_key',
port: 3000
},
production: {
db: 'mongodb://localhost:27017/prod_db',
secretKey: 'prod_secret_key',
port: 80
}
};
const currentConfig = config[process.env.NODE_ENV || 'development'];
module.exports = currentConfig;
এখানে, config.js ফাইলে ডেভেলপমেন্ট এবং প্রোডাকশন পরিবেশের জন্য আলাদা কনফিগারেশন রাখা হয়েছে। এখন, আপনার অ্যাপ্লিকেশন এই কনফিগারেশন অনুসারে ডাটাবেজ বা অন্যান্য সেটিংস ব্যবহার করবে।
আপনার অ্যাপ্লিকেশনে এই কনফিগারেশন ব্যবহার করতে:
const express = require('express');
const config = require('./config');
const app = express();
const port = config.port;
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
৩. config ফোল্ডার ব্যবহার
বড় প্রোজেক্টে, কনফিগারেশন ব্যবস্থাপনা আরও উন্নত করতে config/ নামক একটি ফোল্ডার ব্যবহার করা যায়, যেখানে ডেভেলপমেন্ট, প্রোডাকশন, এবং অন্যান্য পরিবেশের জন্য আলাদা ফাইল রাখা হবে। যেমন:
my-express-app/
│
├── config/
│ ├── default.js
│ ├── production.js
│ └── development.js
└── app.js
এখানে, আপনি config ফোল্ডারের মধ্যে প্রতিটি পরিবেশের জন্য আলাদা কনফিগারেশন ফাইল রাখবেন এবং প্রধান অ্যাপ ফাইলে সেগুলো ইমপোর্ট করবেন।
সারাংশ
ExpressJS অ্যাপ্লিকেশনে পরিবেশ এবং কনফিগারেশন ফাইল ব্যবস্থাপনা গুরুত্বপূর্ণ, কারণ এটি বিভিন্ন পরিবেশে অ্যাপ্লিকেশনের কনফিগারেশন আলাদা রাখতে সাহায্য করে। .env ফাইল এবং dotenv প্যাকেজের মাধ্যমে পরিবেশ ভেরিয়েবলগুলি সহজেই ম্যানেজ করা যায়। এছাড়াও, অ্যাপ্লিকেশনের পরিবেশের জন্য আলাদা কনফিগ ফাইল ব্যবহার করে ডেভেলপমেন্ট ও প্রোডাকশন পরিবেশের জন্য আলাদা সেটিংস ম্যানেজ করা যায়, যা অ্যাপ্লিকেশনের কার্যকারিতা উন্নত করে।
Read more