Принятый ответ действительно старый (а теперь и неправильный).Вот информация (с источником), основанная на текущей версии 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-сервера и добавляет структуру плагинов.Плагины действуют как промежуточное ПО и, следовательно, connect - это инфраструктура промежуточного ПО
Это довольно просто (, а на самом деле код действительно короткий! ).Как только вы позвоните var connect = require('connect'); var app = connect();
, вы получите функцию app
, которая может:
- Может обработать запрос и вернуть ответ.Это потому, что вы в основном получаете эту функцию
- Имеет функцию-член
.use
( source ) для управления плагинами (, которыеотсюда из-за этой простой строки кода ).
Из-за 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
функцией. Express не зависит от Connect ( см. Package.json ).Однако он выполняет все, что делает подключение, то есть:
- Может быть зарегистрирован как
createServer
как подключение, так как это тоже просто функция, которая может принимать пару req
/ res
( источник ). - A использовать функцию для регистрации промежуточного программного обеспечения .
- Утилита
listen
функция для регистрации себя с http
В дополнение к тому, что предоставляет connect (который выражает дубликаты), он имеет множество дополнительных функций.например,
- Имеет Просмотр поддержки движка .
- Имеет глаголы верхнего уровня (получить / отправить и т. д.) для своего маршрутизатора .
- Имеет настройки приложения Поддержка.
Промежуточное программное обеспечение shared
Функция use
ExpressJS и connect совместим, и поэтому промежуточное ПО является общим .Обе являются средами промежуточного программного обеспечения, просто у Express есть более чем простая структура промежуточного программного обеспечения .
Какой из них следует использовать?
Мое мнение: вы достаточно информированы ^ на основании вышеизложенного^ чтобы сделать свой собственный выбор.
- Используйте
http.createServer
, если вы создаете что-то вроде connect / expressjs с нуля. - Используйте connect, если вы создаете промежуточное ПО, тестируете протоколы и т. Д., Поскольку это хорошая абстракция поверх
http.createServer
- Используйте ExpressJS, если вы создаете веб-сайты.
Большинство людей должны просто использовать ExpressJS.
Что плохого в принятом ответе
Это могло бы быть правдой в некоторый момент времени, но сейчас это неправильно:
, который наследует расширенную версию http.Server
Неправильно.Он не расширяет его, и, как вы видели ... использует его
Express делает для подключения то, что Connect делает с модулем http
Express 4.0 даже не зависит от подключения. см. Текущий раздел зависимостей package.json