Что такое Node.js 'Connect, Express и "middleware"?

Несмотря на то, что я хорошо знаю JavaScript, я смущен тем, что именно эти три проекта в экосистеме Node.js. Это что-то вроде Rails Rack? Может кто-нибудь объяснить?

Ответ 1

[ Обновление:. Начиная с версии 4.0, Express больше не использует Connect. Однако Express по-прежнему совместим с промежуточным программным обеспечением, написанным для Connect. Мой первоначальный ответ ниже.]

Я рад, что вы спросили об этом, потому что это определенно общая точка смятения для людей, смотрящих на Node.js. Вот мой лучший пример:

  • Node.js сам предлагает модуль http, метод createServer возвращает объект, который вы можете использовать для ответа на запросы HTTP. Этот объект наследует прототип http.Server.

  • Connect также предлагает метод createServer, который возвращает объект, который наследует расширенную версию http.Server. Соединительные расширения в основном используются, чтобы упростить подключение промежуточного программного обеспечения. Именно поэтому Connect описывает себя как "промежуточное окружение" и часто аналогично Ruby Rack.

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

  • Тогда есть другие рамки, которые идут еще дальше и расширяют Express! Zappa, который объединяет поддержку CoffeeScript, серверного jQuery и тестирования.

Вот конкретный пример того, что подразумевается под "промежуточным ПО": из коробки ни один из вышеперечисленных не служит для вас статическими файлами. Но просто введите connect.static (промежуточное программное обеспечение, которое поставляется с Connect), настроенное для указания на каталог, и ваш сервер предоставит доступ к файлам в этом каталоге. Обратите внимание, что Express также поддерживает Connectwave; express.static совпадает с connect.static. (Оба были известны как staticProvider до недавнего времени.)

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

Ответ 2

Принятый ответ действительно старенький (а теперь и не тот). Здесь информация (с источником) основана на текущей версии 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);

Что подключает добавляет

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

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

Из-за 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 - это всего лишь среда промежуточного программного обеспечения, с приятной функцией use. Экспресс не зависит от Connect (см. Package.json). Однако он делает все, что связывает i.e:

В дополнение к тому, что обеспечивает соединение (которое выражает дубликаты), у него есть куча дополнительных функций. например

Совместное ПО является общим

Функция use ExpressJS и connect совместима, и поэтому промежуточное ПО является общим. Оба являются промежуточными средами, у экспресс только больше, чем простая промежуточная среда.

Какой из них следует использовать?

Мое мнение: вы достаточно информированы ^ на основе выше ^, чтобы сделать свой выбор.

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

Большинство людей должны просто использовать ExpressJS.

Что случилось с принятым ответом

Это могло быть правдой как некоторый момент времени, но сейчас неправильно:

который наследует расширенную версию http.Server

Неправильно. Он не расширяет его и, как вы видели, использует его

Express делает для подключения того, что Connect делает с http-модулем

Экспресс 4.0 даже не зависит от подключения. см. текущую секцию зависимостей package.json

Ответ 3

node.js

node.js - это двигатель javascript для серверной части.
В дополнение ко всем возможностям js он включает сетевые возможности (например, HTTP) и доступ к файловой системе.
Это отличается от клиентских js, когда сетевые задачи монополизируются браузером, и доступ к файловой системе запрещен по соображениям безопасности.

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

Что-то, что работает на сервере, понимает HTTP и может получать доступ к файлам, похожим на веб-сервер. Но это не одно. Чтобы заставить node.js вести себя как веб-сервер, нужно запрограммировать его: обрабатывать входящие HTTP-запросы и предоставлять соответствующие ответы.
Это то, что Express делает: это реализация веб-сервера в js.
Таким образом, реализация веб-сайта похожа на настройку маршрутов Express и программирование специфических для сайта функций.

Middleware и Connect

Обслуживание страниц включает в себя ряд задач. Многие из этих задач хорошо известны и очень распространены, поэтому node Connect модуль (один из многих модулей, доступных для работы под node) выполняет эти задачи.
Посмотрите текущее предложение:

  • logger запрашивающий журнал с поддержкой пользовательских форматов
  • csrf Защита от подделок подпроцесса
  • сжатие Средство сжатия Gzip
  • basicAuth базовая HTTP-аутентификация
  • bodyParser расширяемый анализатор тела запроса
  • json приложение /json parser
  • urlencoded application/x-www-form-urlencoded parser
  • multipart анализатор multipart/form-data​​li >
  • таймаут тайм-ауты запроса
  • cookieParser анализатор файлов cookie
  • сессия поддержка управления сеансом с включенным MemoryStore
  • cookieSession поддержка сеансов на основе файлов cookie
  • методOverride поддержка метода faux HTTP
  • responseTime рассчитывает время отклика и предоставляет через X-Response-Time
  • staticCache уровень кэша памяти для статического() промежуточного программного обеспечения
  • статический потоковый статический файловый сервер, поддерживающий диапазон и многое другое
  • каталог каталог с промежуточным программным обеспечением
  • vhost промежуточное программное обеспечение для сопоставления поддоменов виртуального хоста
  • favicon эффективный сервер favicon (со значком по умолчанию)
  • limit ограничить размер байта тела запроса
  • запрос автоматический синтаксический анализатор запросов, заполнение req.query
  • errorHandler гибкий обработчик ошибок

Connect - это основа, и через нее вы можете выбрать нужные вам модули (sub).
Страница Contrib Middleware перечисляет длинный список дополнительных посредников.
Сам экспресс поставляется с наиболее распространенными сопутствующими средствами Connect.

Что делать?

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

Ответ 4

Connect предлагает API более высокого уровня для общих функций HTTP-сервера, таких как управление сеансом, аутентификация, ведение журнала и многое другое. Экспресс построен поверх функций Connect with advanced (Sinatra like).

Ответ 5

Node.js сам предлагает HTTP-модуль, метод createServer которого возвращает объект, который вы можете использовать для ответа на HTTP-запросы. Этот объект наследует прототип http.Server.

Ответ 6

Связанная информация, особенно если вы используете NTVS для работы с IDE Visual Studio. NTVS добавляет инструменты NodeJS и Express, строительные леса, шаблоны проектов для Visual Studio 2012, 2013.

Кроме того, неверная формулировка, вызывающая ExpressJS или Connect как "WebServer". Вы можете создать базовый WebServer с ними или без них. Базовая программа NodeJS также может использовать http-модуль для обработки HTTP-запросов, тем самым становясь рудиментарным веб-сервером.

Ответ 7

Промежуточное ПО, как следует из названия, на самом деле промежуточное ПО находится между серединой.. серединой чего? середина запроса и ответа.как запрос, ответ, экспресс-сервер находятся в экспресс-приложении На этом рисунке вы можете видеть, что запросы поступают от клиента, затем сервер экспресс-обслуживания обслуживает эти запросы... затем давайте копать глубже... на самом деле мы можем разделить всю задачу всего экспресс-сервера на маленькие отдельные задачи, как, например, таким образом. как промежуточное ПО находится между запросом и ответом небольшой кусок серверных частей выполняет определенную задачу и передает запрос следующей... наконец, при выполнении всех задач ответ получен.. все промежуточное ПО может обращаться к объекту запроса, объекту ответа и следующей функции цикла ответа на запрос.

это хороший пример для объяснения промежуточного программного обеспечения в экспресс-видео YouTube для промежуточного программного обеспечения

Ответ 8

Глупый простой ответ

Connect и Express - это веб-серверы для nodejs. В отличие от Apache и IIS, они могут использовать те же модули, что и "промежуточное ПО".