بک اند با Node.js

امروزه ابزارها و زبان ها و فریم ورک های زیادی برای برنامه نویسی بک اند وجود دارند و هر شخصی بر اساس علایق و سابقه و نیاز خود می تواند با هر یک از این ابزارها و زبان و فریم ورک ها کار کند اما در اینجا میخواهیم در رابط با توسعه بک اند با استفاده از Node.js بپردازیم.

در ادامه ابتدا به مواردی که باعث می شود شما سمت برنامه نویسی بک اند با Node.js بروید و از آن استفاده کنید خواهیم پرداخت سپس یک مثال ساده و مختصر را جهت آشنایی بیشتر با یکدیگر بررسی خواهیم کرد.





چرا باید از Node.js استفاده کنیم؟

1. عملکرد بالا به دلیل استفاده از موتور V8

Node.js بر پایه موتور V8 گوگل ساخته شده است که جاوااسکریپت را به کد ماشین تبدیل می کند. این موتور بهینه سازی های مختلفی برای افزایش سرعت اجرا دارد، به همین دلیل برنامه های Node.js بسیار سریع و کارآمد اجرا می شوند.

2. معماری غیرهمزمان و رویدادمحور

Node.js از معماری non-blocking و event-driven استفاده می کند. این بدین معناست که هنگام اجرای یک عملیات I/O، سیستم منتظر نتیجه نمی ماند و می تواند به درخواست های دیگر نیز رسیدگی کند. این باعث افزایش کارایی و مقیاس پذیری در پروژه های وب با تعداد بالای درخواست ها می شود.

3. استفاده از یک زبان برنامه نویسی (جاوااسکریپت) برای بک اند و فرانت اند

یکی از بزرگ ترین مزایای Node.js این است که توسعه دهندگان می توانند از یک زبان برنامه نویسی (جاوااسکریپت) برای نوشتن کدهای سمت سرور و سمت کلاینت استفاده کنند. این امر باعث کاهش نیاز به یادگیری زبان های مختلف و افزایش همکاری بین تیم های بک اند و فرانت اند می شود. البته از زبان TypeScript هم می توان هم در سمت بک اند و هم در سمت فرانت اند استفاده کرد.

4. اکوسیستم بزرگ NPM (Node Package Manager)

Node.js دارای یک اکوسیستم بزرگ و فعال از Package ها و ماژول های آماده است که از طریق NPM در دسترس هستند. این Package ها به توسعه دهندگان کمک می کنند تا سریع تر کدهای مختلفی مانند مدیریت احراز هویت، ارتباط با پایگاه داده، و غیره را در پروژه های خود ادغام کنند. به علاوه، جامعه بزرگی از توسعه دهندگان برای پشتیبانی و به روزرسانی این ماژول ها وجود دارد.

5. مقیاس پذیری بالا

Node.js به دلیل استفاده از سیستم غیرهمزمان و معماری single-threaded می تواند به راحتی با حجم بالای درخواست ها کنار بیاید. این ویژگی باعث می شود که برنامه های بزرگ و مقیاس پذیر با Node.js به راحتی توسعه داده شوند و مقیاس پروژه ها بدون مشکل افزایش پیدا کند.

6. زمان پاسخ دهی سریع تر

به دلیل اینکه Node.js به صورت non-blocking عمل می کند و نیازی به منتظر ماندن برای عملیات I/O ندارد، زمان پاسخ دهی به درخواست ها کاهش می یابد. این موضوع در برنامه هایی که به شدت با دیتابیس یا API های خارجی کار می کنند، اهمیت ویژه ای دارد.

7. جامعه فعال و پشتیبانی گسترده

Node.js دارای یک جامعه فعال و بزرگ از توسعه دهندگان است. این جامعه پشتیبانی قوی ارائه می دهد و منابع آموزشی، کتابخانه ها و ابزارهای متعددی برای توسعه دهندگان وجود دارد. همچنین، به روزرسانی های مداوم و پشتیبانی امنیتی باعث می شود که پروژه های بزرگ بتوانند به راحتی از Node.js استفاده کنند.

8. مناسب برای برنامه های Real-Time

Node.js برای ساخت برنامه های Real-Time مانند چت، بازی های آنلاین و برنامه های پیام رسان بسیار مناسب است. استفاده از WebSocket در Node.js به راحتی امکان پذیر است که باعث می شود ارتباط دوطرفه بین سرور و کلاینت فراهم شود.

9. پشتیبانی از Microservices

Node.js به خوبی از معماری Microservices پشتیبانی می کند. با این معماری، می توانید برنامه های خود را به بخش های کوچکتر و مستقل تقسیم کنید که هر یک از آن ها به صورت مستقل اجرا می شوند. این موضوع باعث مقیاس پذیری بهتر و ساده تر شدن مدیریت بخش های مختلف برنامه می شود.

10. سهولت در Deployment

با استفاده از ابزارهایی مانند Docker یا سیستم های ابری مثل Heroku، AWS و DigitalOcean، استقرار برنامه های Node.js بسیار ساده و سریع انجام می شود. همچنین، پشتیبانی از کانتینرها و محیط های مجازی سازی به استقرار مقیاس پذیر و قابل مدیریت کمک می کند.


مثال ساده با استفاده از Node.js

نصب Node.js

برای شروع، باید Node.js را بر روی سیستم خود نصب کنید. به سایت nodejs.org بروید و نسخه مناسب سیستم عامل خود را دانلود و نصب کنید. پس از نصب می توانید از طریق ترمینال با اجرای دستور زیر نسخه نصب شده را بررسی کنید.

node -v
npm -v

ساخت یک سرور ساده

یکی از اولین پروژه هایی که معمولادر Node.js نوشته می شود، ساخت یک سرور HTTP ساده است. برای این کار از ماژول داخلی http استفاده می کنیم.

const http = require('http');

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello, World!\n');
});

server.listen(3000, () => {
  console.log('Server running at http://localhost:3000/');
});

این کد یک سرور ساده را راه اندازی می کند که بر پورت 3000 بالا می آید و در صورت دریافت درخواست، پاسخ “Hello, World!” را ارسال می کند.

ایجاد فایل package.json

تا به اینجا به package های NPM هیچ نیازی نداشتیم اما در ادامه برای نصب این پکیج ها نیاز هست که فایل package.json را ایجاد کنیم و برای این کار از دستور زیر استفاده می کنیم.

در این قسمت اگر برای شما این سوال پیش آمد که فایل package.json چیست؟ باید بدانید که این فایل یکی از مهم ترین فایل ها در پروژه های Node.js است و شامل اطلاعات کلیدی درباره پروژه شما است و وظایف مختلفی را در مدیریت پروژه ایفا می کند.

npm init -y

Express.js – یک فریمورک محبوب برای Node.js

Express.js یکی از محبوب ترین فریمورک های وب برای Node.js است که ساخت برنامه های وب و API ها را ساده تر می کند. برای نصب Express از NPM استفاده می کنیم.

npm install express

پس از نصب، می توانیم یک سرور ساده با Express ایجاد کنیم.

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('Hello, Express!');
});

app.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

مدیریت درخواست ها و پاسخ ها

یکی از کاربردهای اصلی Node.js مدیریت درخواست های HTTP و ارائه پاسخ مناسب است. Express این کار را بسیار ساده کرده است. به عنوان مثال، می توانید route های مختلفی برای درخواست های GET و POST تعریف کنید.

app.get('/users', (req, res) => {
  res.json({ message: 'List of users' });
});

app.post('/users', (req, res) => {
  res.json({ message: 'User added' });
});

ارتباط با پایگاه داده

برای ارتباط با پایگاه داده از کتابخانه های مختلفی در Node.js استفاده می شود. به عنوان مثال، برای کار با MongoDB می توان از Mongoose استفاده کرد.

ابتدا باید Mongoose را نصب کنید.

npm install mongoose

سپس می توانید به پایگاه داده متصل شده و عملیات CRUD را انجام دهید.

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/mydb', { useNewUrlParser: true, useUnifiedTopology: true })
  .then(() => console.log('Connected to MongoDB'))
  .catch(err => console.error('Could not connect to MongoDB', err));

const userSchema = new mongoose.Schema({
  name: String,
  age: Number
});

const User = mongoose.model('User', userSchema);

const user = new User({ name: 'John', age: 30 });
user.save()
  .then(() => console.log('User saved'))
  .catch(err => console.error('Error saving user', err));

استفاده از Middleware

Middleware ها در Express به شما این امکان را می دهند که کدهایی بین دریافت درخواست و ارسال پاسخ اجرا کنید. به عنوان مثال می توانید از Middleware برای مدیریت احراز هویت یا ورود درخواست ها استفاده کنید.

app.use((req, res, next) => {
  console.log(`${req.method} ${req.url}`);
  next();
});

امنیت و احراز هویت

برای تأمین امنیت برنامه های بک اند، استفاده از JWT (JSON Web Token) برای احراز هویت بسیار رایج است. ابتدا کتابخانه jsonwebtoken را نصب کنید.

npm install jsonwebtoken
سپس می توانید از آن برای تولید و اعتبارسنجی توکن ها استفاده کنید.
const jwt = require('jsonwebtoken');

const token = jwt.sign({ userId: 1 }, 'secretKey');
console.log(token);

jwt.verify(token, 'secretKey', (err, decoded) => {
  if (err) {
    console.error('Token is not valid');
  } else {
    console.log('Decoded token:', decoded);
  }
});

Deployment (راه اندازی در سرور)

پس از ساخت برنامه، می توانید آن را بر روی سرورهای مختلف مانند راه اندازی کنید. برای راه اندازی در سرورهای ابری، معمولا از Docker برای ایجاد image کانتینر برنامه استفاده می شود یا مستقیم از Git برای مستقر کردن کد بهره می برند.

نتیجه گیری

Node.js به دلیل عملکرد بالا، معماری غیرهمزمان، استفاده از یک زبان مشترک در بک اند و فرانت اند و پشتیبانی گسترده از طریق اکوسیستم NPM به یکی از انتخاب های اصلی برای توسعه دهندگان بک اند تبدیل شده است. این فناوری برای ساخت برنامه های وب Scalable و Real-Time بسیار مناسب است و با کمک جامعه بزرگ آن، توسعه دهندگان می توانند به سرعت راه حل های متنوعی برای پروژه های خود پیدا کنند.


دیدگاه‌ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *