Пълното ръководство за Node.js рамки

Node.js е изпълнение на JavaScript, изградено върху JavaScript V8 на двигателя на Chrome, което е подходящо за внедряване както на настолни, така и на сървърни приложения. Node.js използва управляван от събития, неблокиращ I / O модел, който го прави лек и ефективен в сравнение с нишковидни сървъри, като Apache, IIS и типичния ви Java сървър.

Въпреки че можете да внедрите уеб сървър или приложение изцяло в обикновен код на Node.js, рамката може значително да намали количеството код, което трябва да напишете. В това ръководство ние изследваме обхвата на рамки, достъпни за разработчика Node.js.

Започваме с минималистични рамки, подобни на Sinatra като Express, преминаваме към по-упорити Rails-подобни рамки като Sails.js, след това към пълни стекови рамки със скелета и библиотеки за постоянство като Meteor. И накрая, ние обхващаме REST API рамки като LoopBack и няколко „други“ библиотеки за цели, които попадат извън основните ни категории (като ORM, IoT и статично генериране на сайтове).

Имайте предвид, че класификациите не са добре разделени. Има няколко рамки, за които може да се счита, че принадлежат към множество категории.

Имайте предвид, че има повече проекти на Node.js MVC, отколкото съм изброил тук. В някои случаи елиминирах проекти, които вече не са активни. В други елиминирах рамки, които никога не са привличали значителен интерес от страна на разработчиците въпреки продължителната активност. Целта ми не е да ви разкажа за всеки възможен проект, а по-скоро да ви помогна да определите проекти, които може да си струват времето за оценка.

MVC рамки за Node.js

MVC (модел-view-controller) е парадигма, предназначена да разделя чисто функционалността на десктоп или уеб приложение. Моделът управлява основната структура на данните. Изгледът управлява показаното на потребителя. А контролерът управлява какво се случва в отговор на потребителски заявки.

Rails е пълнофункционална, „мнителна“ базирана на MVC уеб рамка, създадена през 2004 г. от Дейвид Хайнмайер Хансон (известен още като DHH), за да даде на Ruby начин да установи присъствие в мрежата. Rails предполага, че използвате база данни, конвенция за стойности над конфигурацията и мащабира добре. Подобните на Rails Node.js MVC рамки са тези, които са пълнофункционални.

Sinatra е гола основна, по-малко мнителна MVC-базирана уеб рамка, която е създадена през 2007 г. от Blake Mizerany и в момента се поддържа от Konstantin Haase. Sinatra възприе обратния подход на Rails, тъй като има само това, от което се нуждаете за уеб приложение, основно маршрути, за да поставите приложението си в мрежата с DSL (език, специфичен за домейн) над "багажен" слой. Rack е слой за абстракция, базиран на Node.js EventEmitter, и осигурява лесен начин за справяне с поддръжката на клъстери.

Подобните на Sinatra Node.js MVC рамки са тези, които започват лесно и ви позволяват да добавяте компоненти, ако е необходимо. Много от подобните на Sinatra Node.js MVC рамки всъщност имат конвенция за стойността спрямо конфигурацията, така че границата между тях и подобни на Rails рамки не винаги е ясна.

Свързано видео: Node.js съвети и трикове

В това обяснително видео научете няколко техники, които могат да подобрят вашия опит за разработка на Node.

Подобни на Sinatra MVC рамки за Node.js

Диета

Диетата се таксува като малка, модулна уеб рамка Node.js, която е добра за създаване на бързи, мащабируеми приложения и API. Основният диетичен сървър изглежда много като основен експресен сървър:

// Създаване на приложение

  var сървър = изисква ('диета')

  var app = сървър ()

  app.listen ('// localhost: 8000')

// Когато се поиска // localhost: 8000 /, отговорете с „Hello World!“

  app.get ('/', функция ($) {

  $ .end („Здравей, Свят!“)

  })

Diet има структура, която поддържа виртуален хостинг без допълнителни модули или конфигурация. Екземплярите на диетичен сървър функционират като виртуални хостове. Просто ги накарайте да слушат на различни портове.

Маршрутизирането в Diet не само обработва конкретни пътища с анонимни функции, както в app.get()примера по-горе, но също така може да установи конвейер от мидълуер:

// Регистрирайте функции на междинния софтуер за пътя на качване

  app.post ('/ качване / картина', качване, изрязване, записване, завършване)

Node.js по подразбиране има два аргумента requestи responseпри създаване на HTTP (s) сървър, използващ http.createServer(). Диетата комбинира тези два обекта в един сигнен обект, който е представен със знак за долар $. В app.get()примера по-горе можете да видите , че сигналният обект е аргумент за функцията, която обработва getзаявките по главния път. Diet също поддържа модули Node.js и може да ги използва като междинен софтуер, както е показано в app.post()горния пример.

Експрес

Express е минимална и гъвкава рамка за уеб приложения на Node.js, предоставяща стабилен набор от функции за изграждане на еднопосочни, многостранични и хибридни уеб приложения. Express API се занимава с уеб приложението, HTTP заявките и отговорите, маршрутизацията и междинния софтуер. От Express 4.x поддържаният междинен софтуер за Express се намира в редица отделни хранилища, изброени в Connect repo.

Изплуваха няколко вилици и добавки за Express, включително Locomotive, Hapi и Koa. Koa е създаден от един от основните участници в Express.

Въпреки че Express е по-стар и има по-голям отпечатък в сравнение със своите потомци, той все още има по-голяма общност и по-голяма стабилност от всеки от тях. Постоянно виждам Express включен в други рамки и инструменти без коментар, сякаш това е единственият възможен избор за изграждане на уеб сървър на Node.js.

// създаване на експресно приложение

const express = изисква ('express')

const app = express ()

app.get ('/', функция (req, res) {

res.send ('Здравей, свят!')

})

app.listen (3000, функция () {

console.log ('Пример за прослушване на приложение на порт 3000!)

})

Флатирон

Flatiron е част от набора от инструменти Nodejitsu Node. Авторите смятат, че Flatiron е две неща: Първо, инициатива за изграждане на колекция от отделени инструменти с висок стандарт на качество и производителност. И второ, пълна стекова рамка за разработка на уеб приложения, която пакетира тези инструменти заедно, за да улесни изоморфната и базирана на потока разработка на приложения.

Flatiron е подобен на Sinatra, тъй като всичко, което трябва да направите, за да го използвате като уеб сървър, е да requireинсталирате приложение и да използвате приставките http, да настроите някои маршрути и да стартирате приложението, както е показано на екранната снимка по-долу.

Други части от апартамента допълват функционалността на flatiron. Например Бродуей излага прост API на „плъгин“, заместващ инверсията на регистрацията на контрола, използвана от други NVV MVC рамки. Union е хибридно буферирано / стрийминг междинно ядро, което е обратно съвместимо с Connect. Union е парчето, което доставя приставката http.

// създаване на приложение за флатирон

var flatiron = изисква ('flatiron'), 

  app = flatiron.app;

app.use (flatiron.plugins.http);

app.router.get ('/', function () {

  this.res.writeHead (200, {'Content-Type': 'text / plain'});

  this.res.end ('Здравей, свят! \ n');

});

app.start (8080);

Хапи

Hapi е лесна за използване, ориентирана към конфигурацията рамка с вградена поддръжка за валидиране на входа, кеширане, удостоверяване и други основни съоръжения за изграждане на уеб и приложения за услуги. Hapi позволява на разработчиците да се съсредоточат върху писането на логика за многократна употреба чрез силно модулен и предписателен подход. Hapi е разработен от Walmart Labs и е добър избор за големи екипи и големи проекти.

Първоначално Hapi е построен върху Express, но по-късно е преработен, за да бъде самостоятелен. Както се изразиха създателите му, Hapi е създаден с идеята, че конфигурацията е по-добра от кода и че бизнес логиката трябва да бъде изолирана от транспортния слой. В примера по-долу забележете колко ясна и чиста е конфигурацията на сървърните маршрути в кода.

// създаване на hapi сървър

var Hapi = require ('hapi');

var сървър = нов Hapi.Server (3000);

server.route ([

  {

    метод: 'GET',

    път: '/ api / items',

    манипулатор: функция (заявка, отговор) {

      отговор ('Получаване на идентификатор на артикул');

    }

  },

  {

    метод: 'GET',

    път: '/ api / items / {id}',

    манипулатор: функция (заявка, отговор) {

      отговор ('Получаване на идентификатор на артикул:' + request.params.id);

    }

  },

Коа

Koa е по-нова уеб рамка, проектирана от екипа зад Express, но независима от кода на Express. Koa се стреми да бъде по-малка, по-изразителна и по-стабилна основа за уеб приложения и API. Koa използва ES6 генератори за междинен софтуер, а не за обратно извикване на Node.js. По-долу е приложение „Koa,“ Hello, World ”, използващо генератор, който прави, за yield nextда предаде управлението на следващия генератор:

var koa = изисква ('koa');

var app = koa ();

// x-отговор-време

app.use (функция * (следваща) {

  var start = нова дата;

  добив следващ;

  var ms = нова дата - начало;

  this.set ('X-Response-Time', ms + 'ms');

});

// отговор

app.use (функция * () {

  this.body = 'Hello World';

});

app.listen (3000);

Има разлика между генераторите на среден софтуер, използвани от Koa, и обратните обаждания, използвани от Express и Connect. Реализацията на Connect просто предава контрола през поредица от функции, докато се върне, докато Koa дава „надолу по веригата“, след което контролът тече обратно „нагоре“.

В горния пример x-response-time „увива“ генератора на отговори, като yield nextизявлението маркира повикването. Добивът е по-гъвкав от изричните извиквания на функции, тъй като улеснява вмъкването на друг генератор в последователността, например уеб регистратор между таймера и отговора.

Локомотив

Locomotive е уеб рамка за Node.js, която поддържа MVC модели, RESTful маршрути и конвенции за конфигурация (като Rails), като същевременно се интегрира безпроблемно с всяка база данни и механизъм за шаблони. Локомотивът се основава на Express и Connect.

Локомотив добавя към Express някаква структура, подобна на Ruby-on-Rails, която можете да видите на изображението по-долу. Локомотивните изгледи често са вградени JavaScript (html.ejs) файлове, както е показано тук, но Локомотивът също така поддържа Jade и другите съвместими шаблони за Express. Функционалността REST се контролира от маршрути, както обикновено се случва в сървърите, базирани на Express. Можете да използвате каквато база данни и ORM слой желаете с Locomotive. Ръководството демонстрира използването на MongoDB с Mongoose, както и използването на Passport за удостоверяване на потребителя.

Total.js

Total.js е пълнофункционална сървърна рамка за Node.js, написана в чист JavaScript, подобно на PHP Laravel или Python Django. Платформата Total.js е колекция от библиотеки, пакети и завършени продукти, изградени с Total.js.

Total.js е по-подобен на Sinatra, отколкото на Rails, тъй като е модулен и тъй като е агностик по отношение на IDE, бази данни и рамки от страна на клиента. Минимален сървър Total.js може да бъде реализиран със следния код:

изискване ('total.js');

F.route ('/', function () {

    this.plain ('total.js е наистина добър!');

});

F.http ('отстраняване на грешки');

Свързано видео: Node.js съвети и трикове

Подобни на релси MVC рамки за Node.js

Адонис

Adonis е MVC рамка за Node.js, изградена около практически случаи на употреба. Той поддържа инжектиране на зависимост и има постно IoC (инверсия на контрола) контейнер, за да ви помогне да разрешите и да се подиграете с зависимости. Adonis предоставя CLI инструмент за скеле и генериране на проект с всички необходими зависимости.

Сред характеристиките на Adonis са ORM (Lucid) и изпълнение на активния шаблон за дизайн на записи; слой за удостоверяване в комплект със сесии, JWT, основно удостоверяване и лични API маркери; и внедряване на контролери като класове ES2015. Генераторите на ES2015 премахват разхвърляните обратни извиквания, често срещани в по-стария JavaScript. Следният код извлича всички потребители от базата данни и ги връща като JSON:

const Route = use ('Route')

const User = use ('App / Model / User')

Route.get ('/', функция * (заявка, отговор) {

  const потребители = добив User.all ()

  response.json (потребители)

})

Съединение JS

Формулата зад CompoundJS е Express + структура + разширения. Тук структурата е стандартното оформление на директории, а разширенията са модули Node.js, които добавят функционалност към рамката. Целта е да се осигури очевиден и добре организиран интерфейс за разработка на приложения, съвместими с Express. Това означава, че всичко, което работи с Express, ще работи с CompoundJS.

Можете да генерирате скелетни приложения CompoundJS от CLI:

npm инсталирайте съединение -g

съединение init todo-list-app

cd todo-list-app && npm install

възел.

Сайтът слуша // localhost: 3000 / по подразбиране. Можете да продължите да добавяте скеле въз основа на моделите с compound generate scaffoldкомандата.

Геди

Рамката Geddy реализира MVC за Node.js по изключително подобен на Rails начин, дори до структурата на директориите, възможността за отваряне на конзола REPL в контекста на приложението и скрипт за генератор, който можете да използвате за създаване на приложения, ресурс скелета или голи модели и контролери. Скелето може по желание да генерира шаблони EJS, Jade, Handlebars, Mustache и Swig.

В geddy jakeкомандата може да работи на различни Джейк (JavaScript make) задачи в контекста на текущото приложение, с пълен достъп до моделите. Това е полезно за спомагателни задачи като тестване, инициализиране на базата данни за разработка и изброяване на маршрути.

Кракен

Kraken, проект с отворен код на PayPal, е сигурен и мащабируем слой, който разширява Express чрез предоставяне на структура и конвенция, подобно на Locomotive. Въпреки че Kraken е основният стълб на неговата рамка, следните модули могат да се използват и независимо: Lusca (сигурност), Kappa (NPM прокси), Makara (LinkedIn Dust.js i18N) и Adaro (LinkedIn Dust.js Templating).