Что такое узел.JS 'Connect, Express и "middleware"?


несмотря на то, что я знаю JavaScript довольно хорошо, я смущен тем, что ровно эти три проекта в узел.экосистемы на JS сделать. Это что-то вроде стойки рельсов? Может кто-нибудь объяснить?

7 601

7 ответов:

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

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

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

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

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

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

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

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

принятый ответ действительно старый (и теперь неправильный). Вот информация (с источником) на основе текущей версии Connect (3.0) / Express (4.0).

Какой Узел.js поставляется с

http/httpscreateServer который просто принимает обратный вызов (req,res) например

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

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

});

server.listen(3000);

что connect добавляет

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

то, как это делается, довольно просто (и на самом деле код действительно короткий!). Как только вы позвоните 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 являются параллельными проектами. Подключение - это просто в рамках промежуточного программного обеспечения, с хороший до Регистрация с http

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

  1. и посмотреть опоры двигателя.
  2. имеет верхний уровень глаголы (get / post etc.) для своего маршрутизатора.
  3. и настройки приложения поддержка.

промежуточное программное обеспечение shared

The

узел.js

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

узел.js как веб-сервер: express

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

Middleware и Connect

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

  • регистратор регистратор запросов с поддержкой пользовательского формата
  • csrf защита от подделки межсайтовых запросов
  • компрессы Gzip сжатие middleware
  • basicAuth базовая http-аутентификация
  • bodyParser расширяемый парсер тела запроса
  • json application / json parser
  • urlencoded application / x-www-form-urlencoded parser
  • multipart multipart / form-data parser
  • автоотключение запросить тайм-ауты
  • cookieParser cookie parser
  • сессии поддержка управления сеансами с помощью комплекта MemoryStore
  • cookieSession поддержка сеансов на основе файлов cookie
  • methodOverride поддержка метода faux HTTP
  • responseTime вычисляет время отклика и выставляет через Х-Время Отклика
  • staticCache уровень кэша памяти для статического () промежуточного программного обеспечения
  • статический диапазон поддержки потокового статического файлового сервера и многое другое
  • каталог список каталогов middleware
  • vhost промежуточное ПО сопоставления поддоменов виртуальных хостов
  • favicon эффективный сервер favicon (по умолчанию значок)
  • ограничения ограничить байт-размер тел запросов
  • запрос автоматический синтаксический анализатор строк запросов, заполняющий req.запрос
  • errorHandler гибкий обработчик ошибок

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

что делать?

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

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

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

связанные сведения, особенно если вы используете NTV для работы с Visual Studio IDE. NTVS добавляет Как NodeJS, так и Express tools, scaffolding, шаблоны проектов в Visual Studio 2012, 2013.

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

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

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