Несмотря на то, что я достаточно хорошо знаю JavaScript, я не совсем понимаю, что именно делают эти три проекта в экосистеме Node.js. Это что-то вроде Rails 'Rack? Может кто-нибудь объяснить, пожалуйста?
Несмотря на то, что я достаточно хорошо знаю JavaScript, я не совсем понимаю, что именно делают эти три проекта в экосистеме Node.js. Это что-то вроде Rails 'Rack? Может кто-нибудь объяснить, пожалуйста?
Ответы:
[ Обновление: Начиная с версии 4.0, Express больше не использует Connect. Однако Express по-прежнему совместим с промежуточным программным обеспечением, написанным для Connect. Мой оригинальный ответ ниже.]
Я рад, что вы спросили об этом, потому что это определенно распространенная путаница для людей, смотрящих на Node.js. Вот мой лучший способ объяснить это:
Сам Node.js предлагает модуль http , createServer
метод которого возвращает объект, который вы можете использовать для ответа на HTTP-запросы. Этот объект наследует http.Server
прототип.
Connect также предлагает createServer
метод, который возвращает объект, который наследует расширенную версию http.Server
. Расширения Connect в основном предназначены для упрощения подключения промежуточного программного обеспечения . Вот почему Connect описывает себя как «платформу промежуточного программного обеспечения» и часто аналогичен Ruby's Rack.
Express делает для Connect то, что Connect делает с модулем http: он предлагает createServer
метод, расширяющий Server
прототип Connect . Таким образом, есть все функциональные возможности Connect, плюс визуализация представлений и удобный DSL для описания маршрутов. Рубин Синатра - хорошая аналогия.
Тогда есть другие рамки, которые идут еще дальше и расширяют Express! Zappa , например, который интегрирует поддержку CoffeeScript, серверного jQuery и тестирования.
Вот конкретный пример того, что подразумевается под «промежуточным программным обеспечением»: «Из коробки ничего из вышеперечисленного не предоставляет вам статические файлы». Но просто добавьте connect.static
(промежуточное программное обеспечение, которое поставляется с Connect), настроенное для указания на каталог, и ваш сервер предоставит доступ к файлам в этом каталоге. Обратите внимание, что Express также предоставляет промежуточное ПО Connect; express.static
так же, как connect.static
. (Оба были известны как staticProvider
до недавнего времени.)
У меня сложилось впечатление, что большинство «настоящих» приложений Node.js в настоящее время разрабатываются с помощью Express; функции, которые он добавляет, чрезвычайно полезны, и все функции более низкого уровня все еще там, если вы этого хотите.
Принятый ответ действительно старый (и теперь неправильный). Вот информация (с источником), основанная на текущей версии Connect (3.0) / Express (4.0).
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
которая может:
.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 и Connect - это параллельные проекты. Connect - это просто промежуточное ПО с приятной use
функцией. Экспресс не зависит от Connect ( см. Package.json ). Однако он делает все, что подключается, то есть:
createServer
как Like Connect, так как это тоже просто функция, которая может принимать req
/ res
пара ( источник ).listen
для регистрации себя с httpВ дополнение к тому, что предоставляет connect (который выражает дубликаты), он обладает множеством дополнительных функций. например
use
Функция ExpressJS и подключение совместит и поэтому промежуточный слой разделяет . Оба являются промежуточными средами, экспресс только больше, чем простая структура промежуточного программного обеспечения .
Мое мнение: вы достаточно информированы - на основании вышеизложенного - чтобы сделать свой собственный выбор.
http.createServer
если вы создаете что-то вроде connect / expressjs с нуля.http.createServer
Большинство людей должны просто использовать ExpressJS.
Возможно, это было правдой, но сейчас это не так:
которая наследует расширенную версию http.Server
Неправильно. Он не расширяет его и, как вы видели ... использует его
Express делает для подключения, что Connect делает с модулем http
Экспресс 4.0 даже не зависит от подключения. см. текущий раздел зависимостей package.json
Node.js - это движок JavaScript для серверной части.
В дополнение ко всем возможностям js он включает сетевые возможности (например, HTTP) и доступ к файловой системе.
Это отличается от js на стороне клиента, где сетевые задачи монополизированы браузером, и доступ к файловой системе запрещен по соображениям безопасности.
То, что работает на сервере, понимает HTTP и может получить доступ к файлам, звучит как веб-сервер. Но это не один.
Чтобы node.js вел себя как веб-сервер, нужно его запрограммировать: обрабатывать входящие HTTP-запросы и предоставлять соответствующие ответы.
Это то, что делает Express: это реализация веб-сервера в js.
Таким образом, реализация веб-сайта аналогична настройке маршрутов Express и программированию специфических функций сайта.
Обслуживание страниц включает в себя ряд задач. Многие из этих задач хорошо известны и очень распространены, поэтому модуль Connect узла (один из множества модулей, доступных для работы под узлом) реализует эти задачи.
Смотрите текущее впечатляющее предложение:
Connect - это фреймворк, и через него вы можете выбрать (под) модули, которые вам нужны.
Страница Contrib Middleware перечисляет длинный список дополнительных промежуточных программ .
Сам по себе Express поставляется с наиболее распространенным промежуточным ПО Connect.
Установите node.js.
Node поставляется с npm , менеджером пакетов узла .
Команда npm install -g express
загрузит и установит экспресс по всему миру (см. Руководство по экспрессу ).
Запуск express foo
в командной строке (не в узле) создаст готовое к запуску приложение с именем foo. Перейдите в его (только что созданный) каталог и запустите его с помощью узла с командой node <appname>
, затем откройте http://localhost:3000
и посмотрите. Теперь вы в.
Node.js
сам предлагает модуль HTTP, метод которого createServer возвращает объект, который можно использовать для ответа на запросы HTTP. Этот объект наследует http.Server
прототип.
Связанная информация, особенно если вы используете NTVS для работы с Visual Studio IDE. NTVS добавляет в Visual Studio 2012, 2013 как инструменты NodeJS, так и Express, строительные леса и шаблоны проектов.
Кроме того, неверно указано слово, которое вызывает ExpressJS или Connect как «WebServer». Вы можете создать базовый веб-сервер с ними или без них. Базовая программа NodeJS также может использовать модуль http для обработки запросов http, таким образом становясь рудиментарным веб-сервером.
Промежуточное ПО, как следует из названия, на самом деле промежуточное ПО находится между серединой .. серединой чего? середина запроса и ответа .. как запрос, ответ, экспресс-сервер находятся в экспресс-приложении на этой картинке, вы можете видеть, что запросы поступают от клиента, затем сервер экспресс-обслуживания выполняет эти запросы ... затем давайте копать глубже ... на самом деле мы можем разделить это вся задача всего экспресс-сервера в маленьких отдельных задачах, как в этом случае. как промежуточное программное обеспечение располагается между запросом и ответом небольшой кусок серверных частей, выполняющих какую-то конкретную задачу, и передает запрос следующей ... наконец, выполняя все задачи, ответ был получен ... все промежуточное программное обеспечение может получить доступ к объекту запроса, объекту ответа и следующей функции запроса цикл ответа ..
Это хороший пример для объяснения промежуточного программного обеспечения в видео Express YouTube для промежуточного программного обеспечения