Не так давно, а именно 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 habrahabrn'); }) 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
Автор: InteractiveTechnology