Node.js چیست؟ آموزش کامل و جامع Node.js
فهرست مطالب
Node.js چیست؟
Node.js یک محیط اجرایی JavaScript است که به شما امکان میدهد کد JavaScript را در خارج از مرورگر اجرا کنید. این پلتفرم بر پایه موتور V8 کروم ساخته شده و برای ساخت برنامههای شبکهای مقیاسپذیر طراحی شده است.
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('سلام به دنیای Node.js خوش آمدید!');
});
server.listen(3000, () => {
console.log('سرور در پورت 3000 در حال اجراست');
});
تاریخچه Node.js
Node.js در سال 2009 توسط Ryan Dahl ایجاد شد. هدف اصلی او ساخت وبسایتهایی با قابلیت push بود، جایی که ارتباط بین سرور و مرورگر به صورت بلادرنگ برقرار میشود.
معماری Node.js
معماری Node.js بر پایه “حلقه رویداد” (Event Loop) استوار است که اجازه میدهد عملیاتهای ورودی/خروجی به صورت ناهمزمان انجام شوند.
console.log('شروع');
setTimeout(() => {
console.log('این پیام با تاخیر نمایش داده میشود');
}, 2000);
console.log('پایان');
ویژگیهای اصلی Node.js
Node.js دارای ویژگیهای منحصر به فردی است که آن را به یک انتخاب عالی برای توسعه برنامههای مدرن تبدیل میکند.
۱. اجرای ناهمزمان
Node.js از مدل non-blocking I/O استفاده میکند که به برنامه اجازه میدهد در حین انجام عملیاتهای ورودی/خروجی به پردازش درخواستهای دیگر بپردازد.
۲. سرعت بالا
به لطف موتور V8 گوگل، اجرای کد JavaScript در Node.js بسیار سریع است.
۳. اکوسیستم غنی
با بیش از یک میلیون پکیج در npm، توسعهدهندگان به کتابخانههای متنوعی دسترسی دارند.
مدیریت پکیج با NPM
NPM (Node Package Manager) بزرگترین مخزن کتابخانههای نرمافزاری در دنیاست و به صورت پیشفرض همراه با Node.js نصب میشود.
# نصب یک پکیج
npm install express
# نصب پکیج به عنوان dependency توسعه
npm install --save-dev nodemon
# آغاز یک پروژه جدید
npm init
# اجرای اسکریپتهای تعریف شده
npm run start
برنامهنویسی ناهمزمان در Node.js
برنامهنویسی ناهمزمان یکی از مهمترین مفاهیم در Node.js است. این الگو به ما اجازه میدهد عملیاتهای زمانبر را بدون مسدود کردن اجرای برنامه انجام دهیم.
// استفاده از Promises
const fs = require('fs').promises;
async function readFile() {
try {
const data = await fs.readFile('file.txt', 'utf8');
console.log(data);
} catch (error) {
console.error('خطا در خواندن فایل:', error);
}
}
// استفاده از Callbacks
fs.readFile('file.txt', 'utf8', (err, data) => {
if (err) {
console.error('خطا در خواندن فایل:', err);
return;
}
console.log(data);
});
سیستم ماژول در Node.js
Node.js از سیستم ماژول CommonJS و ES Modules پشتیبانی میکند که به شما امکان میدهد کد خود را به بخشهای قابل استفاده مجدد تقسیم کنید.
// math.js
exports.add = (a, b) => a + b;
exports.subtract = (a, b) => a - b;
// یا با استفاده از ES Modules
export const multiply = (a, b) => a * b;
export const divide = (a, b) => a / b;
// app.js
const math = require('./math');
console.log(math.add(5, 3)); // 8
// یا با ES Modules
import { multiply } from './math';
console.log(multiply(4, 2)); // 8
کار با Express.js
Express.js یک فریمورک وب سریع و کمحجم برای Node.js است که امکانات زیادی برای ساخت APIها و برنامههای وب فراهم میکند.
const express = require('express');
const app = express();
// میانافزار برای پردازش JSON
app.use(express.json());
// تعریف یک مسیر
app.get('/', (req, res) => {
res.json({ message: 'سلام به API من خوش آمدید!' });
});
// تعریف مسیر POST
app.post('/users', (req, res) => {
const { name, email } = req.body;
// پردازش دادهها
res.status(201).json({ message: 'کاربر ایجاد شد' });
});
app.listen(3000, () => {
console.log('سرور در حال اجرا روی پورت 3000');
});
اتصال به پایگاه داده
Node.js با انواع مختلف پایگاههای داده سازگار است. در اینجا مثالی از اتصال به MongoDB با استفاده از Mongoose را میبینیم:
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/myapp', {
useNewUrlParser: true,
useUnifiedTopology: true
});
// تعریف مدل
const userSchema = new mongoose.Schema({
name: String,
email: { type: String, required: true },
createdAt: { type: Date, default: Date.now }
});
const User = mongoose.model('User', userSchema);
// ایجاد کاربر جدید
async function createUser() {
try {
const user = new User({
name: 'علی',
email: '[email protected]'
});
await user.save();
console.log('کاربر با موفقیت ذخیره شد');
} catch (error) {
console.error('خطا در ذخیره کاربر:', error);
}
}
بهترین شیوههای کدنویسی Node.js
۱. مدیریت خطا
همیشه از try-catch برای مدیریت خطاها استفاده کنید و خطاها را به درستی لاگ کنید.
۲. متغیرهای محیطی
از فایل .env برای ذخیره اطلاعات حساس و تنظیمات پیکربندی استفاده کنید.
۳. امنیت
همیشه از کتابخانههای امنیتی مانند helmet و express-rate-limit استفاده کنید.
استقرار برنامههای Node.js
برای استقرار برنامههای Node.js گزینههای مختلفی وجود دارد:
۱. سرویسهای ابری
استفاده از پلتفرمهایی مانند Heroku، AWS یا Google Cloud Platform
۲. استقرار با Docker
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
ابزارهای مفید برای کار با Node.js
ابزارهای توسعه
– VS Code با افزونههای Node.js
– Postman برای تست API
– Nodemon برای توسعه
ابزارهای مانیتورینگ
– PM2 برای مدیریت پروسس
– New Relic برای مانیتورینگ
– Winston برای لاگینگ