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

в 12:10, , рубрики: nodejs, метки:

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

Не так давно, а именно 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


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js