Node.jsAdvanced
Node.js Best Practices
Project structure, error handling, security, performance — Node.js-এর সেরা অভ্যাসগুলো বাংলায়।
10টি অংশবাংলা ভাষায়
Project Structure
Recommended Structuretext
text
my-app/
├── src/
│ ├── controllers/ # Request handlers
│ ├── models/ # Database models
│ ├── routes/ # API routes
│ ├── middleware/ # Custom middleware
│ ├── services/ # Business logic
│ ├── utils/ # Helper functions
│ ├── config/ # Configuration
│ └── index.js # Entry point
├── tests/ # Test files
├── .env # Environment vars
├── .gitignore
├── package.json
└── README.mdError Handling
// Custom error class
class AppError extends Error {
constructor(message, statusCode) {
super(message);
this.statusCode = statusCode;
this.isOperational = true;
}
}
// Global error handler
app.use((err, req, res, next) => {
const status = err.statusCode || 500;
const message = err.isOperational
? err.message
: "Internal Server Error";
res.status(status).json({
status: "error",
message,
...(process.env.NODE_ENV === "development" && {
stack: err.stack,
}),
});
});Security
- Helmet — Security headers সেট করে
- CORS — Cross-origin request control
- Rate Limiting — DDoS protection
- Input Validation — User input sanitize করুন
- SQL Injection — Parameterized queries ব্যবহার করুন
- Environment Variables — Secrets কোডে hardcode করবেন না
- HTTPS — Production-এ সবসময় HTTPS ব্যবহার করুন
Performance
- Caching — Redis/Memcached ব্যবহার করুন
- Compression — gzip/brotli middleware
- Database Indexing — Query optimize করুন
- Connection Pooling — DB connection reuse
- PM2 Clustering — CPU cores ব্যবহার করুন
- Stream — বড় ফাইলে Stream ব্যবহার করুন
// Compression
const compression = require("compression");
app.use(compression());
// Response time header
app.use((req, res, next) => {
const start = Date.now();
res.on("finish", () => {
const duration = Date.now() - start;
console.log(req.method, req.url, duration + "ms");
});
next();
});মূল নীতি
Reusable কোড লিখুন, error handle করুন, security-কে গুরুত্ব দিন, test লিখুন, documentation রাখুন।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।