Що таке "Connect, Express" та "проміжне програмне забезпечення" Node.js?


634

Незважаючи на те, що я дуже добре знаю JavaScript, я збентежений, що саме роблять ці три проекти в екосистемі Node.js. Це щось на зразок стійки Rails '? Може хтось, будь ласка, пояснить?


1
Я не використовував підключення, але ця сторінка, безумовно, робить це аналогічним Rack 'Rack. Ви розумієте, що таке проміжне програмне забезпечення поза контекстом Node?
Метт Бал

Чесно кажучи, не так багато, як хотілося б. Наскільки я знаю, це шар, який виконує всі предпрограмні речі, такі як маршрутизація, gzipping, заголовки, cookie ..? Чи правий я? Так це працює таким чином, що маршрутизація до належного контролера / дії MVC не знаходиться в рамках MVC (як Rails), а в середньому програмному забезпеченні?
до


8
ЦЕ ВІДКРИТИ ВСІ ВАШИ ДУБТИ ТА ВІДПОВІДЬ БІЛЬШЕ ЗАПИТАННЯ, ЩО ВИ ЗНАЄМО, Я розумію, що це вже пізно (сподіваємось, хтось прокручує вниз ...), але прочитавши наступну статтю в блозі, ви очистите всі питання, які виникають у вас щодо Connect, Express та Middleware . Це також навчає вас трохи про Node.js. http://evanhahn.com/understanding-express/
DotNetInfo

@DiegoCaxito Ваше посилання розірвано.
щогли

Відповіді:


891

[ Оновлення: Починаючи з версії 4.0, Express більше не використовує Connect. Однак Express все ще сумісний із середнім програмним забезпеченням, написаним для Connect. Моя оригінальна відповідь нижче.]

Я радий, що ви запитали про це, адже це, безумовно, загальна проблема плутанини для людей, які дивляться на Node.js. Ось мій найкращий випадок пояснення цього:

  • Сам Node.js пропонує модуль http , createServerметод якого повертає об'єкт, який ви можете використовувати для відповіді на HTTP-запити. Цей об'єкт успадковує http.Serverпрототип.

  • Connect також пропонує createServerметод, який повертає об'єкт, який успадковує розширену версію http.Server. Розширення Connect в основному є, щоб полегшити підключення програмного забезпечення . Ось чому Connect описує себе як "проміжне програмне забезпечення" і часто аналогізується стійці Ruby's.

  • Express робить для підключення те, що Connect робить для модуля http: він пропонує createServerметод, який розширює Serverпрототип Connect . Таким чином, вся функціональність Connect є, плюс візуалізація перегляду та зручний DSL для опису маршрутів. Синатра Рубі - хороша аналогія.

  • Потім є інші рамки, які йдуть ще далі і розширюють Express! Наприклад, Zappa , який інтегрує підтримку CoffeeScript, jQuery на стороні сервера та тестування.

Ось конкретний приклад того, що означає "проміжне програмне забезпечення": Поза жодним із перерахованих вище статичні файли для вас не подаються. Але просто закиньте connect.static(проміжне програмне забезпечення, яке постачається з Connect), налаштоване так, щоб вказати на каталог, і ваш сервер забезпечить доступ до файлів у цьому каталозі. Зауважте, що Express надає також середні засоби Connect; express.staticте саме, що connect.static. (Обидва були відомі як staticProviderдо недавнього часу.)

Моє враження, що більшість «справжніх» додатків Node.js розробляються разом із Express; функції, які він додає, надзвичайно корисні, і всі функціональні можливості нижчого рівня все ще є, якщо ви цього хочете.


130
Одне, що мене хвилює щодо Connect, - це те, що його документація, схоже, не підтверджує, що Node - це більше, ніж сервер HTTP. "Connect - це середовище середнього програмного забезпечення для Node.js" - ні, "Connect - це програма середнього програмного забезпечення для HTTP-сервера Node.js"
тонкий

46
@slim Я думаю, що ти занадто багато читаєш. Виробники Connect є видатними розробниками вузлів; вони добре знають, що Node - це більше, ніж сервер HTTP. Але це не є сервер HTTP вбудований, і з'єднання є основою проміжного шару , який ви можете використовувати у вашому додатку Node.js.
Тревор Бернхем

22
О, я впевнений, що виробники Коннекта цілком усвідомлюють це. Вони не могли б досягти того, що мають, без глибокого розуміння Вузла. Але вибір слів заплутаний для новачків у Node; і для новачків у Connect.
тонкий

10
кристально чисте, до чого слід прагнути всіх відповідей. Відмінна робота Тревор.
Марк Ессел

6
Чудове пояснення. Такі відповіді допомагають залучити нових людей до екосистеми Node.js. Для людей, які знайомляться з розробкою веб-додатків на Node.js, експрес - це місце для початку. Щоб продовжити аналогію Рубі, Експрес можна порівняти з Сінатра. Це особливо чудово для створення API JSON для клієнтських додатків Ajax. Я знайшов одне, що після того, як додаток досягає певного рівня складності, потрібен ще один шар, який нагадує більше Rails. Я працюю над Локомотивом для цієї мети, який ще більше шарів поверх Express.
Джаред Гансон

159

Прийнята відповідь справді стара (а тепер неправильна). Ось інформація (з джерелом) на основі поточної версії Connect (3.0) / Express (4.0).

Що пропонує Node.js

http / https, createServer який просто приймає зворотний дзвінок (req, res), наприклад

var server = http.createServer(function (request, response) {

    // respond
    response.write('hello client!');
    response.end();

});

server.listen(3000);

Що додає, додає

Посереднє програмне забезпечення - це в основному будь-яке програмне забезпечення, яке знаходиться між вашим кодом програми та API низького рівня. Connect розширює вбудований функціонал сервера HTTP та додає модуль плагінів. Плагіни виступають як проміжне програмне забезпечення, а значить, з'єднання - це середовище середнього програмного забезпечення

Як це зробити, це досить просто ( а насправді код справді короткий! ). Як тільки ви телефонуєте, var connect = require('connect'); var app = connect();ви отримуєте функцію, appяка може:

  1. Може обробити запит і повернути відповідь. Це тому, що ви в основному отримуєте цю функцію
  2. Має функцію-член .use( джерело ) для управління плагінами ( що походить звідси через цей простий рядок коду ).

Через 1.) ви можете зробити наступне:

var app = connect();

// Register with http
http.createServer(app)
    .listen(3000);

Поєднайте з 2.) і отримаєте:

var connect = require('connect');

// Create a connect dispatcher
var app = connect()
      // register a middleware
      .use(function (req, res, next) { next(); });

// Register with http
http.createServer(app)
    .listen(3000);

Connect надає функцію утиліти, щоб зареєструватися, httpщоб не потрібно телефонувати http.createServer(app). Його виклик listenі код просто створює новий http-сервер, реєструє з'єднання як зворотний виклик і передає аргументи на http.listen. З джерела

app.listen = function(){
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};

Отже, ви можете:

var connect = require('connect');

// Create a connect dispatcher and register with http
var app = connect()
          .listen(3000);
console.log('server running on port 3000');

Це все-таки ваша стара старенька http.createServerз плагіновою рамкою зверху.

Що додає ExpressJS

ExpressJS і connect - це паралельні проекти. Connect - це лише проміжне програмне забезпечення з приємною useфункцією. Експрес не залежить від Connect ( див. Package.json ). Однак він робить все, що з'єднує, тобто:

  1. Може бути зареєстровано createServerяк підключити, оскільки це теж лише функція, яка може приймати req/ resпару ( джерело ).
  2. Функція використання для реєстрації програмного забезпечення .
  3. Функція утиліти listenдля реєстрації себе за допомогою http

Окрім того, що надає connect (який виражає дублікати), він має ще багато функцій. напр

  1. Має підтримку перегляду двигуна .
  2. Має дієслова верхнього рівня (get / post тощо) для свого маршрутизатора .
  3. Має підтримку налаштувань програми .

Посереднє програмне забезпечення спільне

useФункція ExpressJS і підключення поєднає і тому проміжний шар розділяє . Обидва є рамками середнього програмного забезпечення, Express просто має більше, ніж просту рамку проміжного програмного забезпечення .

Який з них слід використовувати?

Моя думка: ви достатньо поінформовані ^ на підставі вище ^, щоб зробити власний вибір.

  • Використовуйте, http.createServerякщо ви створюєте щось на кшталт connect / expressjs з нуля.
  • Використовуйте підключення, якщо ви пишете проміжне програмне забезпечення, тестуєте протоколи тощо, оскільки це хороша абстракція поверх http.createServer
  • Використовуйте ExpressJS, якщо ви створюєте веб-сайти.

Більшість людей повинні просто використовувати ExpressJS.

Що не так у прийнятій відповіді

Це могло бути правдою як певний час, але зараз неправильно:

що успадковує розширену версію http.Server

Неправильно. Він не розширює його, і як ви вже бачили ... використовує його

Експрес робить для підключення того, що Connect робить для модуля http

Express 4.0 навіть не залежить від підключення. дивіться поточний розділ залежностей package.json


Ви говорите, дає можливість обробляти запит і повертати відповідь, але люди кажуть, що Express - це справді веб-сервер ... Я плутаний. Чи не надсилати відповідь назад потрібна можливість веб-сервера (наприклад, Express)?
PositiveGuy

1
хороший матеріал, дякую! дуже корисно ... особливо не знаючи, що з'єднання насправді є тим, що забезпечує маршрутизацію, а express просто успадковує це, це не єдиний / вихідний постачальник маршрутизації. І випадки використання в кінці корисні, тому що я припустив, що мені доведеться використовувати підключення AND Express, але насправді все, що вам потрібно використовувати, - це експрес для веб-додатків, тому це очистило для мене величезну справу. Ви не встановлюєте обидва, ви встановлюєте те чи інше!
PositiveGuy

Ваша відповідь має бути зверху. коли я прочитав прийняту відповідь, я відкликав її. Але після прочитання вашої відповіді ... naahhh
Арун Джошла

67

node.js

Node.js - двигун javascript для серверної сторони.
Окрім усіх можливостей js, вона включає можливості мереж (наприклад, HTTP) та доступ до файлової системи.
Це відрізняється від клієнтських js, коли завдання мереж монополізуються браузером, а доступ до файлової системи заборонений з міркувань безпеки.

node.js як веб-сервер: express

Щось, що працює на сервері, розуміє HTTP і може отримати доступ до файлів, схоже на веб-сервер. Але це не одна.
Щоб node.js поводився як веб-сервер, його потрібно запрограмувати: обробляти вхідні запити HTTP та надавати відповіді.
Ось що робить Express: це реалізація веб-сервера в js.
Таким чином, реалізація веб-сайту подібна до налаштування маршрутів Express та програмування специфічних особливостей сайту.

Посереднє програмне забезпечення та Connect

Обслуговування сторінок передбачає ряд завдань. Багато з цих завдань добре відомі та дуже поширені, тому модуль Connect вузла (один із багатьох модулів, доступних для роботи під вузлом) реалізує ці завдання.
Дивіться поточну вражаючу пропозицію:

  • реєстратор запитів реєстратора з підтримкою користувальницького формату
  • csrf Захист від підробки на різних веб-сайтах
  • стиснути програмне забезпечення для стиснення Gzip
  • basicAuth basic http аутентифікація
  • bodyParser розширюваний запит аналізатор тіла
  • json application / json parser
  • urlencoded application / x-www-form-urlencoded parser
  • багаточастинний аналізатор даних / багато форматів
  • тайм- аути запиту
  • аналізатор cookieParser
  • Підтримка управління сеансом сеансу з комплектуванням MemoryStore
  • підтримка сеансів cookie на основі cookie
  • підтримка методу Oververide faux HTTP
  • responseTime обчислює час відповіді і виставляє через X-Response-Time
  • рівень кешу пам'яті staticCache для програмного забезпечення static ()
  • статичний потоковий сервер статичного файлу, що підтримує Діапазон та багато іншого
  • каталог директорій з переліком програмного забезпечення
  • vhost віртуальний хост субдоменного відображення проміжного програмного забезпечення
  • favicon- ефективний сервер favicon (зі значком за замовчуванням)
  • обмежити обмеження на байтажний розмір органів запитів
  • запит автоматичного аналізатора рядків запитів, заповнення req.query
  • errorHandler гнучкий обробник помилок

Connect - це фреймворк, і за допомогою нього ви можете вибрати потрібні (під) модулі.
Сторінка Contrib Middleware перераховує довгий список додаткових середніх програм .
Експрес сам постачається з найпоширенішими середніми мережами Connect.

Що робити?

Встановити node.js.
Вузол постачається з npm , менеджером пакетів вузлів .
Команда npm install -g expressзавантажить та встановить експрес у всьому світі (перевірте експрес-посібник ).
Запуск express fooу командному рядку (не у вузлі) створить готову до запуску програму з назвою foo. Перейдіть до його (щойно створеного) каталогу та запустіть його з вузлом командою node <appname>, а потім відкрийте http://localhost:3000та побачите. Тепер ви в.


3
чудова відповідь спасибі Це вид простого лайна, який пропускає кожен пост у блозі, простий настройкою якого може бути ??? якщо ви ніколи цього не робили. Так це просто, коли ви це вже зробили, але у вас немає поняття, як почати ПЕРШИЙ час! Я ненавиджу це, коли розробники не помічають, що в публікаціях блогу це важливо. Я не хочу знаходити іншу публікацію в блозі, щоб знайти налаштування. Просто вкажіть посилання на інший пост у вашому іншому дописі, це дуже корисно, тому мені не доведеться полювати за одним. Врятуй мене на полюванні!
PositiveGuy

3
Express 4.0.0 потрібно зробити sudo npm install -g express-generator
mohamed-ibrahim

@getsetbro ви просто маєте на увазі "npm install" для встановлення залежностей.
Торстен Бартхель

16

Connect пропонує API вищого рівня для загальних функцій HTTP-сервера, таких як управління сеансами, аутентифікація, ведення журналів та інше. Експрес побудований на версії Connect із вдосконаленою функцією (схожа на Сінатру).


0

Node.jsсам пропонує модуль HTTP, метод createServer повертає об'єкт, який ви можете використовувати для відповіді на HTTP-запити. Цей об'єкт успадковує http.Serverпрототип.


0

Пов’язана інформація, особливо якщо ви використовуєте NTVS для роботи з Visual Studio IDE. NTVS додає інструменти NodeJS та Express, ліси, шаблони проектів у Visual Studio 2012, 2013.

Також дієслівне слово, яке називає ExpressJS або Connect як "WebServer", невірно. Ви можете створити базовий WebServer з ними або без них. Основна програма NodeJS також може використовувати модуль http для обробки запитів http, ставши тим самим рудиментарним веб-сервером.


0

проміжне програмне забезпечення, як випливає з назви, насправді середнє програмне забезпечення сидіти між серединою .. середина чого? середина запиту та відповіді .. як запит, відповідь, експрес-сервер сидять у експрес-додатку на цьому малюнку, ви можете бачити, що запити надходять від клієнта, тоді сервер експрес-сервера обслуговує ці запити .. потім дозволяє копати глибше .. насправді ми можемо розділити це ціле завдання експрес-сервера в невеликих окремих завданнях, як-от таким чином. як проміжне програмне забезпечення сидить між запитом і відповіддю невеликим шматом частин сервера, які виконують якусь конкретну задачу, і передають запит наступному .. нарешті, виконуючи всі завдання, відповідь зроблена .. весь середній інвентар може отримати доступ до об'єкта запиту, об'єкта відповіді та наступної функції запиту цикл реагування ..

це хороший приклад для пояснення проміжного програмного забезпечення в експрес- відео на YouTube для середнього програмного забезпечення


-7

Дурна проста відповідь

Connect і Express - це веб-сервери для nodejs. На відміну від Apache та IIS, вони можуть обидва використовувати однакові модулі, які називаються "середніми".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.