Pull to refresh

Connect 2 — Новые дополнения, улучшения и документация!

Reading time4 min
Views4.7K


Не так давно, а именно 2011-10-05 вышла новая версия фреймворка connect 2.0. На хабре был замечен пробел, а тут выдалось пару свободных часов. Буду писать сразу про версию 2.0.1 вышедшую 29 февраля. Во второй версии сделали много очень нужных и долгожданных изменений.


HTTP и HTTPS для одного сервера-приложения!


Ранее connect.Server был унаследован от net.Server из ядра NodeJS, это вызывало неудобства для создания одновременно HTTP и HTTPS приложения. В результате connect() (ранее connect.createServer()) стал новой функцией более универсальной. Это означает, что вы можете пропустить вызов app.listen(), а просто использвать в приложениях net.Server из NodeJS, пример:
var connect = require('connect'), http = require('http'), https = require('https');

tlsOptions = {
  key: fs.readFileSync('keys/key.pem'),
  cert: fs.readFileSync('keys/cert.pem')
};

var app = connect()
  .use(function(req, res) {
    res.end('hello habrahabr\n');
  })

http.createServer(app).listen(80);
https.createServer(tlsOptions, app).listen(443);


Улучшенный парсер запросов


В дополнение bodyParser() добавлены новые функции обработки входящих запросов: json() для запросов application/json, multipart() для запросов multipart/form-data, и urlencoded() для запросов application/x-www-form-urlencoded. Все они представляют новые возможности доступа к передаваемым данным в запросах для req.body, а функция multipart() предоставляет доступ к передаваемым параметрам не только в req.body, но и req.files к загружаемым файлам.

Подключать пасеры можно по отдельности:
app.use(connect.json());
app.use(connect.urlencoded());
app.use(connect.multipart());

это будет равносильно записи:
app.use(connect.bodyParser());


Поддержка deflate и gzip на уровне ядра


С версии Node 0.6.0 стало доступно нативное использование сжатия (zlib.createGzip и zlib.createDeflate), поэтому в connect было добавлено дополнение compress() для их поддержки. Дополнение имеет параметры настройки сжатия передаваемые в нативные функции.

Парсер Cookie


Для дополнения cookieParser() теперь доступны подписи. Раньше надо было использовать session({ secret: string }) и само дополнение session(). Теперь можно работать с подписанными cookies и своими сессиями через свойство req.signedCookies, а так же для работы с не подписанными через свойство req.cookies.
connect()
  .use(connect.cookieParser('keyboard cat'))
  .use(function(req, res, next){
    res.end(JSON.stringify(req.cookies));
  })


Обработка ошибок



Ранее работа с ошибками была проблемой. Все ошибки перехватывались errorHandler() в самом connect() и выдавались стандартными страницами. Теперь появилась возможность переопределять обработчик ошибок, при этом так же используя next(err) в своём коде.
app.use(function(err, req, res, next){
  if (4 == err.status / 100) {
    // render a client-error page
  } else {
    // render a server-error page
  }
});


Сессии


Как уже упоминалось session() больше не требуют secret. Для cookie свойство .maxAge по умолчанию было null, а это значило, что все установленные cookie удалялись при закрытии браузера.

Стороние дополнения


Все дополнения к connect() должны остаться работоспособными. Это всё не совместимо с express 2.0, ожидайте выхода express 3.0!

Список всех изменений


Были внесены описанные существенные изменения, а также несколько других, которые не влияют на API. Все тестирования проводились с помощью Mocha.

2.0.1 / 2012-02-29
  • Добавлено покрытие тестами vhost() дополнения
  • Изменено cookieParser() подпись для cookie поддержка использования SHA-2 [senotrusov]
  • Исправлено static() Range: ответ с 416 если невыполнимо
  • Исправлено vhost() дополнение. Закрытие #494


2.0.0 / 2011-10-05
  • Добавлено cookieSession() дополнение только для cookie-сессий
  • Добавлено compress() дополнение для gzip / deflate поддержки
  • Добавлено session() «proxy» настройка для проверки X-Forwarded-Proto
  • Добавлено json() дополнение для поддержки «application/json»
  • Добавлено urlencoded() дополнение для поддержки «application/x-www-form-urlencoded»
  • Добавлено multipart() дополнение для поддержки «multipart/form-data»
  • Добавлено cookieParser(secret) доступ к подписанным cookies
  • Добавлено поддержка подписи cookie в cookieParser()
  • Добавлено поддержка JSON-сериализаций cookies в cookieParser()
  • Добавлено err.status поддержка в Connect по умолчанию
  • Добавлено X-Cache MISS / HIT в staticCache()
  • Добавлено public res.headerSent checking nodes res._headerSent until node does
  • Изменено basicAuth() req.remoteUser в req.user
  • Изменено по умолчанию session() в браузер-сессии cookie. Закрывает #475
  • Изменено больше не в нижнем регистре имена в cookie
  • Изменено bodyParser() теперь использует json(), urlencoded() и multipart()
  • Изменено errorHandler() возможность переопределения (в разработке)
  • Изменено использование next() для перехвата ошибок даёт больше возможностей их дальнейшей обработки
  • Убрано http[s].Server наследование, для возможности создания в одном приложении http и https
  • Убрано .createServer() (использовать connect())
  • Убрано свойство secret в session(), использовать cookieParser(secret)
  • Убрано connect.session.ignore поддержка массива
  • Убрано router() дополнение. Закрывает #262
  • Исправлено set-cookie только 1 раз за сессию
  • Исправлено FQDN поддержка. Не добавляет "/"
  • Исправлено 404 при проведении XSS. Закрывает #473
  • Исправлено HEAD поддержка для 404 и 500 генерируемых Connect


Теперь ждём express 3!

Источники и ссылки:
Запись из блога TJ Holowaychuk
Страница Connect
Github connect
Tags:
Hubs:
Total votes 26: ↑22 and ↓4+18
Comments22

Articles