در ابتدا کار را با فریم‎ورک‎های مینیمالیستی شبیه Sinatra مثل Express آغاز می‎کنیم و به‌سمت فریم‎ورک‎های مستقل‎تر شبیه Rails مثل Sails.js پیش خواهیم رفت. در انتها به سراغ فریم‎ورک‎های کاملاً مستقل با کتابخانه‎های پایدار مثل Meteor خواهیم رفت. سرانجام، فریم‎ورک‎های REST API از قبیل LoopBack و چند کتابخانه دیگر که برای اهدافی خارج از دسته‌بندی اصلی ما قرار دارد (مثل ORM، IoT و تولید سایت‌های ایستا) را بررسی خواهیم کرد. توجه داشته باشید كه این طبقه‌بندی‎ها به طور کامل از هم جداسازی نشده‎اند. چندین فریم‎ورک وجود دارد که می‎توان آن‌ها را متعلق به چند طبقه‎بندی دانست. پروژه‎های Node.js MVC بیشتری نیز وجود دارد که در فهرست ما گنجانده شده‎اند. هدف ما در معرفی این فریم‎ورک‎ها این است که بتوانيد پروژه‎هایی را که ممکن است بتواند در زمان شما صرفه‌جویی کند را شناسایی کنید.

فریم‎ورک‎های MVC برای Node.js

MVC (سرنام Model-View-Controller) یک پارادایم در نظر گرفته شده برای پیکربندی شفاف عملکرد یک اپلیکیشن دسکتاپ یا وب است. مدل (Model) ساختار داده‎های پایه را مدیریت می‎کند. 
نمایه (View) آن چیزی که به کاربر نشان داده می‎شود را مدیریت می‎کند و کنترل‎کننده (Controller) عکس‎العملی که در پاسخ به درخواست کاربر صادر می‎شود را مدیریت می‎کند. Rails یک فریم‎ورک وب MVC محور کامل است که در سال ۲۰۰۴ توسط دیوید هینمایر هنسون ساخته شد تا امکان ایجاد حضور وب در Ruby را فراهم کند. Rails فرض می‎کند که شما از یک مرکز داده استفاده می‎کنید و در پیکربندی مقادیر و مقیاس‎ها را به‌خوبی لحاظ کرده‎اید. فریم‎ورک‎های Node.js MVC شبیه Rails همان‎هایی هستند که از تمام قابلیت‎ها برخوردارند. Sinatra یک فریم‎ورک وب MVC محور با امکانات پایه و کم‌اهمیت‎تر است که در سال ۲۰۰۷ توسط بلیک میزرانی ساخته شد و در حال حاضر توسط کونستانتین هاسه به کار خود ادامه می‎دهد. Sinatra رویکردی متفاوت از Rails دارد و تنها شامل چیزهایی است که شما برای ساخت یک اپلیکیشن وب نیاز دارید و اساساً راه را برای قرار دادن اپلیکیشن شما در وب توسط یک DSL (سرنام Domain Specific Language) روی یک لایه Rack هموار می‎کند. Rack یک لایه انتزاعی مبتنی بر Node.js EventEmitter است که راهی ساده را برای برخورد با پشتیبانی از کلاستر فراهم می‎کند. فریم‎ورک‎های Node.js MVC به شما اجازه می‎دهند در موارد لزوم اجزایی را به آن اضافه کنید. خیلی از فریم‎ورک‎های Node.js MVC شبیه Sinatra کار پیکربندی مقادیر را نیز انجام می‎دهند. به همین دلیل، متمایز کردن آن‌ها با فریم‎ورک‎های شبیه Rails همیشه هم به‌وضوح قابل انجام نیست.

مطلب پیشنهادی

اکوسیستم Node.js چیست و چه قابلیت‎هایی دارد؟

یک محیط اجرایی چندسکویی

فریم‎ورک‎های MVC شبیه Sinatra برای Node.js

Diet

Diet خود را یک فریم‎ورک وب Node.js کوچک و ماژولار می‎داند که برای ساخت سریع اپلیکیشن‎ها و API گسترش‎پذیر مناسب است. یک سرور پایه Diet بسیار شبیه به یک سرور پایه Express است.

// Create an app
  var server = require(‘diet’)
  var app = server()
  app.listen(‘http://localhost:8000’)

// When http://localhost:8000/ is requested, respond with “Hello World!”
  app.get(‘/’, function($){
    $.end(‘Hello World!’)
  })

فهرست ۱

Diet از ساختاری برخوردار است که بدون نیاز به هرگونه ماژول یا پیکربندی اضافی از میزبانی مجازی پشتیبانی می‎کند. سرور Diet از توابع به‌عفاکتورین سرورهای مجازی استفاده می‎کند و کافی است از طریق پورت‎های مختلف به آن‌ها دسترسی پیدا کنیم. مسیریابی در Diet نه‌تنها با توابع ناشناس مثل ()app.get در فهرست ۱ اداره می‎شود، بلکه می‎توان این کار را از طریق یک مسیر middleware همانند فهرست ۲ نیز انجام داد.

// Register middleware functions for the upload path
  app.post(‘/upload/picture’, upload, crop, save, finish)

فهرست ۲

Node.js در زمان ساخت یک سرور HTTP(s) با استفاده از () http.createServer به طور پیش‌فرض از دو نشان‎وند request و response برخوردار است. Diet این دو مقدار را به یک مقدار تبدیل می‎کند که توسط علامت $ ارائه می‎شوند. در فهرست ۱ در  ()app.get شما مشاهده می‎کنید که تنها یک مقدار در نشان‌وند این تابع که درخواست‌های get را در مسیر ریشه اداره می‎کند وجود دارد. Diet از ماژول‎های Node.js نیز پشتیبانی می‎کند و می‎تواند از آن‌ها به‌عفاکتورین middleware استفاده کند. 

Express

Express یک فریم‎ورک اپلیکیشن وب Node.js مختصر و انعطاف‎پذیر است که برای ساخت صفحات اپلیکیشن‎های وب مجموعه‎ای از قابلیت‎های قدرتمند را ارائه می‎کند. Express API اپلیکیشن‎های وب، درخواست‎ها و پاسخ‎های HTTP، مسیریابی و middleware را مدیریت می‎کند. از نسخه Express 4.x میان‎افزارهای پشتیبانی شده برای Express در تعدادی مخزن جداگانه قرار گرفته است که فهرست آن در مخزن Connect قرار دارد. چندین فورک و افزونه برای Express در نظر گرفته شده است که شامل Locomotive, Hapi و Koa است. Koa توسط یکی از مشارکت‌کنندگان اصلی Express ساخته شده است. Express  نسبت به سایر فریم‎ورک‎ها از اجتماع و گروه‎های پشتیبانی بزرگ‌تری برخوردار است و با خیلی از ابزارها و فریم‎ورک‎های دیگر برای ساخت وب سرورها در Node.js ترکیب می‎شود. 

// create an express application

const express = require(‘express’)
const app = express()

app.get(‘/‘, function (req, res) {
  res.send(‘Hello world!’)
})

app.listen(3000, function () {
  console.log(‘Example app listening on port 3000!)
})

فهرست ۳

مطلب پیشنهادی

10 ویژگی جدید و جذاب جاوااسکریپت برای عاشقان وب

تکنیک‌های کاربردی ES6

Flatiron

Flatiron بخشی از مجموعه ابزار Nodejitsu Node است. نویسندگان این فریم‎ورک آن را برای دو منظور در نظر گرفته‎اند. ابتدا، یک ابتکار عمل برای ساخت مجموعه‎ای از ابزارهای جدا شده با کیفیت و عملکرد بالا. دوم، یک فریم‎ورک توسعه اپلیکیشن وب کامل که با گردآوری این ابزار در کنار یکدیگر توسعه اپلیکیشن‎های وب را ساده‎تر کند. Flatiron به این دلیل در دسته فریم‎ورک‎های شبیه Sinatra قرار گرفته که تمام کاری که شما برای استفاده از آن در یک وب سرور باید انجام دهید این است که درخواست (require) را مشخص کنید، یک اپلیکیشن تعریف کنید، از پلاگین‎های http استفاده کنید، چند مسیر تنظیم و اپلیکیشن را آغاز کنید.
سایر اجزای این مجموعه نیز کارایی Flatiron را افزایش می‎دهند. برای مثال Broadway یک پلاگین ساده API را ارائه می‎کند که می‎تواند جایگزینی برای معکوس کردن کنترل ثبت نام استفاده شده توسط سایر فریم‎ورک‎های Node MVC باشد. Union یک کرنل میانی برای بافر و استریم است که با Connect سازگار است. Union بخشی است که پلاگین http را ارائه می‎کند. 

// create a flatiron application

var flatiron = require(‘flatiron’), 
  app = flatiron.app;

app.use(flatiron.plugins.http);

app.router.get(‘/‘, function () {
  this.res.writeHead(200, { ‘Content-Type’: ‘text/plain’ });
  this.res.end(‘Hello world!n’);
});

app.start(8080);

فهرست ۴

Hapi

Hapi یک فریم‎ورک با امکانات استفاده و پیکربندی ساده است که از اعتبارسنجی ورودی‎ها، کش، احراز هویت و سایر امکانات ضروری برای ساخت یک وب‎سایت و خدمات تحت وب پشتیبانی می‎کند. Hapi توسعه‌دهندگان را قادر می‎سازد تا از طریق رویکردهای تمام ماژولار و سفارشی روی نوشتن اپلیکیشن‎های چند بار مصرف تمرکز کنند. Hapi توسط آزمايشگاه‎های والمارت توسعه پیدا کرد و یک انتخاب ایده‎آل برای گروه‎ها و پروژه‎های بزرگ است. Hapi در اصل به‌عفاکتورین بخشی از Express ساخته شد، اما بعد کار خود را به‌صورت مستقل ادامه داد. همان گونه که سازندگان آن اعلام می‎کنند، Hapi با این شعار ساخته شد که «پیکربندی بهتر از کدنویسی است و این منطق تجاری باید از لایه انتقال جدا باشد». در مثال زیر، مشاهده می‎کنید که پیکربندی مسیرهای سرور چقدر واضح و مشخص در کد قرار گرفته است. 

// create a hapi server

var Hapi = require(‘hapi’);
var server = new Hapi.Server(3000);

server.route([
  {
    method: ‘GET’,
    path: ‘/api/items’,
    handler: function(request, reply) {
      reply(‘Get item id’);
    }
  },
  {
    method: ‘GET’,
    path: ‘/api/items/{id}’,
    handler: function(request, reply) {
      reply(‘Get item id: ’ + request.params.id);
    }
  },

فهرست ۵

Koa

Koa یکی از جدیدترین فریم‎ورک‎های وب است که توسط گروه سازنده Express طراحی شده است، اما مستقل از کدهای Express کار می‎کند. هدف از ساخت Koa امکان ایجاد اپلیکیشن‎های وب و API کوچک‌تر، مفهوم‎تر و با پایه‎ریزی قوی‎تر بوده است. Koa به‌جای فراخوانی‎های Node.js از مولدهای ES6 برای میان‌افزار استفاده می‎کند. کد زیر یک اپلیکیشن Hello, World نوشته شده با Koa آورده شده است که از یک مولد که با yield next کنترل را به مولد بعدی منتقل می‎کند، استفاده کرده است. 

var koa = require(‘koa’);
var app = koa();

// x-response-time
app.use(function *(next){
  var start = new Date;
  yield next;
  var ms = new Date – start;
  this.set(‘X-Response-Time’, ms + ‘ms’);
});

// response
app.use(function *(){
  this.body = ‘Hello World’;
});

app.listen(3000);

فهرست ۶

بین مولدهای middleware استفاده شده توسط Koa و فراخوانی‎هایی که توسط Express و Connect استفاده می‎شود تفاوت وجود دارد. پیاده‌سازی Connect به‌سادگی کنترل را از طریق مجموعه‎ای از توابع منتقل می‎کند، در حالی که yield در Koa فروکش می‌کند و سپس چرخه کنترل دوباره اوج می‎گیرد. در فهرست ۶، x-response-time مولد پاسخ را با عبارت yield next پوشش داده است.

Locomotive

Locomotive یک فریم‎ورک وب مخصوص Node.js است که از الگوهای MVC، مسیرهای RESTful و convention over configuration پشتیبانی می‎کند و می‎تواند با هر نوع مرکز داده و موتور الگو یکپارچه شود. Locomotive بر پایه Express و Connect ساخته شده است.
همان گونه که در شکل ۱ مشاهده می‎کنید، Locomotive بعضی از ساختارهای شبیه Ruby-on-Rails را به Express اضافه می‎کند. نمایه‎های Locomotive اغلب در فایل‎های جاوااسکریپت (html.ejs) جاسازی می‎شوند، اما Locomotive از Jade و سایر موتورهای الگوی سازگار با Express نیز پشتیبانی می‎کند. عملکرد REST توسط مسیرها کنترل می‎شود. شما می‎توانید با Locomotive از هر نوع مرکز داده و لایه ORM که مایل باشید استفاده کنید.

شکل۱

مطلب پیشنهادی

یادگیری ماشینی از طریق جاوااسکریپت به درون مرورگرهای کاربران آمد

کاربردی‌ترین کتابخانه یادگیری ماشینی

Total.js

Total.js یک فریم‎ورک سمت سرور کامل برای Node.js است که مثل Laravel پی‎اچ‎پی یا Django پایتون تماماً با جاوااسکریپت نوشته شده است. سکوی Total.js متشکل از مجموعه‎ای از کتابخانه‎ها، بسته‎ها و محصولات تکمیلی است که توسط خود Total.js ساخته شده‎اند. با استفاده از قطعه کد فهرست ۷ می‎توان یک وب‌سرور ابتدایی Total.js را پیاده‌سازی کرد.

require(‘total.js’);

F.route(‘/’, function() {
    this.plain(‘total.js is really good!’);
});

F.http(‘debug’);

فهرست ۷

فریم‎ورک‎های MVC شبیه Rails برای Node.js

Adonis

Adonis یک فریم‎ورک MVC مخصوص Node.js است که بر اساس موارد کاربرد عملی ساخته شده است. این فریم‎ورک یک ابزار CLI را برای چهارچوب‌بندی و تولید یک پروژه فراهم می‎کند. از جمله ویژگی‎های Adonis می‎توان به اجرای الگوی طراحی رکورد فعال، لایه احراز هویت به همراه سشن‎ها، JWT، اعتبارسنجی ساده، نشانه‎های API شخصی و پیاده‌سازی کنترل‎کننده‌ها به‌عفاکتورین کلاس‎های ES2015 اشاره کرد. مولدهای ES2015 فراخوانی‎های اضافی مرسوم در جاوااسکریپت را حذف می‎کند. فهرست ۸ تمام کاربران را از مرکز داده استخراج و در قالب JSON ارائه می‎کند.

const Route = use(‘Route’)
const User = use(‘App/Model/User’)

Route.get(‘/’, function * (request, response) {
  const users = yield User.all()
  response.json(users)
})

فهرست ۸

CompoundJS

فرمول پشت CompoundJS شامل  + Express ساختار + افزونه‎ها است. ساختار همان استاندارد صفحه‌بندی و دایرکتوری‎ها است و افزونه‎ها ماژول‎های Node.js هستند که کارایی این فریم‎ورک را افزایش می‎دهند. هدف CompoundJS تأمین یک رابط واضح و سازمان‌یافته برای توسعه اپلیکیشن‎های سازگار با Express است. این به این معنا است که هرچه با Express کار می‎کند با CompoundJS هم‌ کار خواهد کرد. شما می‎توانید چهارچوب اپلیکیشن‎های CompoundJS را با CLI تولید کنید. 

npm install compound -g
compound init todo-list-app
cd todo-list-app && npm install
node .

فهرست ۹

سایت به طور پیش‌فرض به http://localhost:3000/ گوش می‎کند. شما می‎توانید با فرمان compound generate scaffold بر مبنای مدل‎ها چهارچوب درست کنید.

Geddy

فریم‎ورک Geddy به همان شیوه Rails یکMVC  را برای Node.js پیاده‌سازی می‎کند. با همان ساختار دایرکتوری، قابلیت باز کردن کنسول REPL در اپلیکیشن و تولیدکننده اسکریپت که شما می‎توانید برای ساخت اپلیکیشن‎ها از آن استفاده کنید. چهارچوب‌بندی را می‌توان با استفاده از قالب‎های EJS، Jade، Handlebars، Mustache و Swig انجام داد. فرمان geddy jake می‎تواند وظایف (Jake (JavaScript make گوناگونی را در اپلیکیشن انجام دهد. این امر برای وظایف جانبی مانند تست، پیاده‌سازی توسعه مرکز داده و فهرست‌بندی مسیرها مفید است.

Kraken

یک پروژه منبع باز PayPal امن با لایه گسترش‌پذیر که امکانات Express را با فراهم کردن ساختار و ضوابط مثل Locomotive گسترش می‎دهد. هرچند Kraken ستون اصلی فریم‎ورک محسوب مي‎شود، از این ماژول‎ها نیز می‎توان به‌صورت جداگانه استفاده کرد: 

Lusca (امنیت)، Kappa (NPM Proxy)،
 Makara (LinkedIn Dust.js i18N) و
 Adaro (LinkedIn Dust.js Templating).

همان‎ گونه که شکل ۲ مشاهده می‎کنید، Kraken برای تولید پروژه‎ها به yo متکی است. مثل Locomotive این فریم‎ورک نیز پروژه‎های خود را به‌شیوه مرسوم Rails سازماندهی می‎کند. 

شکل ۲

Meteor

Meteor یک سکوی اپلیکیشن کامل است که به شما امکان می‎دهد تا با یک روش ساده تماماً با جاوااسکریپت و از طریق یک کد پایه، اپلیکیشن وب یا موبایل بسازيد. علاوه بر تبادلات از طریق HTML، این فریم‎ورک داده را برای پردازش از سرور به کلاینت ارسال می‎کند. علاوه بر اجرای مستقل، Meteor می‎تواند با Angular و React نیز برای پشتیبانی از الگوی MVC یکپارچه شود. با وجود اینکه این فریم‎ورک روی Node.js ساخته شده است و از Handlebars, Blaze و قالب‎های Jade پشتیبانی می‎کند، اما نمی‎توان Meteor را شبیه Express دانست. Meteor این امکان را برای شما فراهم می‎کند تا برای پروژه خود نمونه‌سازی و کدهایی با قابلیت پشتیبانی از تمام سکو‎ها (وب، اندرويد و iOS) ایجاد کنید. قابلیت یکپارچه شدن با MongoDB را دارد و از پروتکل داده توزیع شده (DDP) استفاده می‎کند. در سمت کلاینت، Meteor به jQuery وابسته است و می‎توان آن را با کتابخانه JavaScript UI استفاده کرد.
Meteor توسط گروه توسعه Meteor که یک استارت‌آپ سرچشمه گرفته از Y Combinator است تولید شده است. این فریم‎ورک به اندازه‎ای جا افتاده است که چندین کتاب آموزشی درباره آن نوشته شده است.
Meteor به‌تنهایی یک نرم‌افزار منبع باز رایگان است، اما گروه Meteor آن را با دریافت حق عضویت Meteor Galaxy DevOps پولی کرده‎اند که شامل فضای سرور AWS و پشتیبانی از Meteor می‎شود. (شکل ۳)


شکل ۳

Nodal

Nodal خود را یک سرور وب Node.js معرفی می‎کند که برای ساخت سرویس‎های API بهینه‌سازی شده است. این سرور وب فریم‎ورک مستقل، واضح و توسعه‌پذیر مربوط به خود را دارد که فلسفه آن بیشتر شبیه به Rails و Django است. می‎توان PostgreSQL را به‌ طور مستقل یا ماژول مرکز داده با Nodal یکپارچه کرد، از آن به‌شکل ORM کوئری گرفت، در مسیریابی آن از Regex استفاده کرد و ابزار CLI را برای ساخت مدل‎ها و کنترل‌کننده‌ها به کار گرفت. برای راه‌اندازی یک سرور Nodal ابتدا باید Nodal را نصب و سپس یک سرور جدید را آماده و راه‌اندازی کنید.

مطلب پیشنهادی

مایکروسافت امکان محاسبات چندرشته‌ای را برای انجام وظایف سنگین محاسباتی به Node.js اضافه کرد

Napa.js قرار است عملکردی شبیه به C++ داشته باشد

Sails

Sails کار ساخت اپلیکیشن‎های Node.js سفارشی و حرفه‎ای را ساده می‎کند. این فریم‎ورک طراحی شده است تا الگوی آشنای MVC را شبیه‌سازی کند که می‎تواند نیازهای اپلیکیشن‎های مدرن مثل API داده‌محور با امکان بسط‌پذیری و معماری مبتنی بر خدمات را نیز برآورده کند. استفاده از آن به‌ویژه برای ساخت اپلیکیشن‎های چت، داشبوردهای پویا و بازی‎های چندنفره ایدهآل است، اما می‎توانید از آن برای ساخت هرگونه اپلیکیشن تحت وب دیگر نیز استفاده کنید. Sails از WebSocket پشتیبانی می‎کند و به طور خودکار پیام‎های سوکت را به مسیرهای اپلیکیشن شما ارسال می‎کند. Sails روی Express و Socket.io ساخته شده است و برای ORM خود از Waterline استفاده می‎کند. Waterline افاکتوریع مختلفی از شیوه‎های ذخيره‌سازی داده و مراکز داده مختلف (SQL و NoSQL) را پشتیبانی می‎کند. Sails به‌گونه‎ای طراحی شده تا با تمام فریم‎ورک‎های وب کاربردی مثل Angular و React یا دستگاه‎های موبایل مثل iOS و اندروید سازگار باشد. تاکنون سه کتاب درباره Sails به چاپ رسیده است.

ThinkJS

ThinkJS یک فریم‎ورک MVC است که از قابلیت‎های ES6 (تابع generator) و ES7 (async و await)، Babel و TypeScript، کتابخانه‎های WebSocket، افاکتوریع مختلفی از سشن و کش و مراکز داده MySQL, MongoDB, PostgreSQL و SQLite پشتیبانی می‎کند. EJS, Jade, Swig و موتورهای الگوی Nunjucks نیز توسط این فریم‎ورک پشتیبانی می‎شوند. سازنده مدعی است که ThinkJS قابلیت و پیچیدگی Sails و عملکرد قدرتمند Express یا Koa را یک جا جمع کرده است.