Что такое узел.JS 'Connect, Express и "middleware"?
несмотря на то, что я знаю JavaScript довольно хорошо, я смущен тем, что ровно эти три проекта в узел.экосистемы на JS сделать. Это что-то вроде стойки рельсов? Может кто-нибудь объяснить?
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/https
createServer
который просто принимает обратный вызов (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
что можно:
- может обрабатывать запрос и возвращать ответ. Это потому, что вы в основном получаете этот функция
- имеет функцию-член
.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 (которые выражают дубликаты), он имеет множество дополнительных функций. например,
- и посмотреть опоры двигателя.
- имеет верхний уровень глаголы (get / post etc.) для своего маршрутизатора.
- и настройки приложения поддержка.
промежуточное программное обеспечение 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-запросов, тем самым становясь рудиментарным веб-сервером.