Сделать все правильно с первого раза - это не только невозможно, но и странно.
В последние месяцы мы собрали ваши отзывы, проблемы и потребности и работали за кулисами, чтобы сформировать Fastify v2, чтобы решить все из них. .
Начиная с сегодняшнего дня, Fastify v2 будет выпущен как Release Candidate, так что вы можете попробовать его и сообщить нам, есть ли еще что-то, что мы должны исправить или улучшить, прежде чем выпускать окончательный выпуск. В течение периода RC мы также обновим все наши официальные плагины для поддержки в лучшем случае Fastify v2 и будем использовать новые функции для их улучшения. Вы можете установить его сейчас с помощью npm install fastify@next
.
Говоря о новых функциях и критических изменениях, ниже вы можете найти список всех основных изменений, которые мы сделали, со ссылкой на их запрос на вытягивание, кратким описанием и примером кода.
Сообщите нам о любых проблемах с совместимостью и обновлением на странице https://github.com/fastify/help.
Добавлен хук onError # 1236
Добавьте новый обработчик приложения под названием onError
, который разработчик может использовать для отслеживания всех ошибок, которые Fastify отправляет пользователю. Это может быть очень полезно также для отправки ошибок внешнему трассировщику или для поддержки решения APM (мониторинг производительности приложений).
В Fastify v1 мы не можем сделать это легко, потому что setErrorHandler
может будет перезаписан, и хук onSend
получит уже сериализованную полезную нагрузку.
В Fastify v1 нет способа получить объект ошибки и быть на 100% уверенным, что ваш код никогда не будет перезаписан.
fastify.addHook(‘onError’, (request, reply, error, next) => { // some code next() })
Переместить все свойства с префиксом _ в символы в следующем # 1237 # 1128
Внутренние свойства fastify, которым предшествовал префикс _
в ключевых объектах, таких как запрос и ответ, теперь используют символы. Это обеспечивает более четкое разделение между внутренними компонентами и вашим приложением, четко определяя, какие свойства вы можете использовать.
Плагины теперь могут получать как / prefix, так и prefix / # 1228.
Возможность добавлять префиксы ко всем маршрутам, определенным в плагине, является ключевой особенностью Fastify. В версии 2 мы решили проблему, из-за которой невозможно было настроить маршрут как для /prefix
, так и для /prefix/
, следующим образом:
const fastify = require(‘fastify’)() fastify.register(function (instance, options, next) { // the route will be called for both ‘/english/’ and ‘/english’ instance.get(‘/’, (req, reply) => { reply.send({ greet: ‘hello’ }) }) next() }, { prefix: ‘/english’ }) fastify.listen(8000, function (err, address) { if (err) throw err console.log(`server listening on ${address}`) })
Обработчик ошибок по умолчанию, регистрирующий ошибку # 1135
В Fastify v1 мы регистрировали все ошибки независимо от того, был ли (или нет) собственный обработчик ошибок (через setErrorHandler()
). В Fastify v2 это поведение было перенесено в обработчик ошибок. Это означает, что обработчик ошибок теперь отвечает за регистрацию самой ошибки.
fastify.setErrorHandler(function (error, request, reply) { request.log.warn(error) // this is needed now var statusCode = error.statusCode >= 400 ? error.statusCode : 500 reply .code(statusCode) .type(‘text/plain’) .send(statusCode >= 500 ? ‘Internal server error’ : error.message ) })
Убедитесь, что в Reply # serialize используется настраиваемый сериализатор # 1163.
reply.serialize(payload)
сериализует полезную нагрузку с помощью настраиваемого сериализатора, если он установлен.
Лучшее управление ошибками # 1168
Мы можем резюмировать эту новую функцию одним словом: стандартизация!
Начиная с Fastify v2 ошибки больше не будут генерироваться встроенными, но они будут экземплярами пользовательских классов ошибок.
Вы можете получить доступ к полному списку ошибок на странице require('fastify/errors')
.
Увеличил avvio до 6.0.0. №1201
Новая версия avvio удаляет экземпляр из хука onClose в качестве первого параметра.
fastify.addHook('onClose', (done) => { // some code done() })
Добавлен хук preValidation # 1153
Этот перехватчик был необходим, потому что не было возможности запустить логику аутентификации до проверки, но после перехвата onRequest
или промежуточного программного обеспечения. Бывают случаи, когда вы не хотите раскрывать свою логику проверки неаутентифицированным запросам, этот хук устраняет эту проблему.
fastify.addHook('preValidation', (request, reply, next) => { // some code next() })
Измените basePath на префикс # 1183
Свойство basePath
было заполнено параметром prefix
при передаче в плагин. Теперь он был переименован в prefix
, чтобы обеспечить более интуитивно понятный API. Использование basePath
теперь не рекомендуется.
Раздельное ведение журнала и опции # 1164 # 1166
Из Fastify v2 вы должны создать пользовательский идентификатор запроса как параметр верхнего уровня в конфигурации Fastify, а не внутри конфигурации регистратора. Это все еще поддерживается, но Fastify регистрирует предупреждение. Опция будет удалена из Fastify v3.
Измените тайм-аут плагина по умолчанию на 10 секунд вместо 0 # 1145
У каждого плагина теперь есть 10 секунд для загрузки, иначе произойдет ошибка. Это решает давнюю проблему с фазой начальной загрузки Fastify: если вы забудете вызвать обратный вызов или выполнить обещание, это приведет к зависанию фазы загрузки без возможности ее легкой отладки.
Пино v5 # 1065
Теперь Fastify внутренне использует Pino v5 для лучшего и более производительного ведения журнала с нулевой стоимостью редактирования журнала. Проверьте это на https://www.nearform.com/blog/announcing-pino-v5-0-0/.
В качестве примера следующий фрагмент будет печатать все входящие заголовки, кроме authorization
.
const fastify = require(‘fastify’)({ logger: { stream: stream, redact: [‘req.headers.authorization’], level: ‘info’, serializers: { req(req) { return { method: req.method, url: req.url, headers: req.headers, hostname: req.hostname, remoteAddress: req.ip, remotePort: req.connection.remotePort } } } } })
Обновлен Не найден хендлинг №1084
Если один из ваших маршрутов возвращает ошибку 404, Fastify v2 будет обрабатывать customErrorHandler
, а не notFoundHandler
. Вы по-прежнему можете направлять запросы в notFoundHandler
через reply.callNotFound()
. notFoundHandler
будет использоваться только для генерируемых маршрутизатором сообщений 404.
Хуки: всегда используйте основные объекты Fastify # 1066
Это была долгожданная «функция», в Fastify v1 onRequest
и onResponse
имеют разные сигнатуры и объекты, что приводит к путанице и немного сложным внутренним компонентам.
В Fastify v2 мы исправили это, и теперь каждый хук будет отображать одну и ту же сигнатуру. Промежуточное ПО будет по-прежнему предоставлять основные объекты Node.js по умолчанию, чтобы обеспечить совместимость с промежуточным ПО Express. Если вы не используете промежуточное ПО Express, мы настоятельно рекомендуем использовать перехватчики Fastify.
fastify.addHook(‘onRequest’, function (request, reply, next) { // request and reply are the core Fastify objects next() }) fastify.addHook(‘onResponse’, function (request, reply, next) { // request and reply are the core Fastify objects next() }) fastify.use(function (req, res, next) { // req and res are the Node core objects next() })
Удалите `req.id` в сериализаторе # 1032
В журналах больше нет свойства req.id
, а только reqId
(меньше дублирования, меньше места, больше скорость!).
Удален url.parse и добавлена поддержка парсера пользовательской строки запроса # 1270
Поскольку url.parse
не рекомендуется в Node.js v12, мы решили удалить его из кодовой базы и использовать вместо него основной querystring
модуль Node.js. С этим изменением синтаксический анализ строки запроса стал в два раза быстрее, чем раньше!
Мы также представили новую опцию конфигурации (querystringParser
) для изменения парсера строки запроса по умолчанию, если это необходимо.
Расширенная поддержка кроссплатформенных сборок и официальная поддержка пряжи # 1226
Благодаря расширенной поддержке конвейеров Azure наша CI более производительна, и мы можем своевременно тестировать кроссплатформенные (Linux / yarn и Windows / npm) с помощью одной настройки. Это также дает официальную поддержку пряжи для Node 8 и Node 10. Мы благодарим AppVeyor за поддержку в последний год тестирования Windows. Мы также пока сохраняем нашу интеграцию travis-ci для Linux / npm.
Благодарности
Более 1700 коммитов, более 90 релизов, более 450 форков, используемых в производстве более чем 8 компаниями, более 260 тысяч загрузок и 87 официально признанных плагинов.
Вся эта работа была бы невозможна без помощи нашей фантастической команды, которой мы благодарим за их упорный труд!
allevo, cemremengu, delvedor, evanshortiss , Lmammino, jsumners, mcollina, nwoltman, starptech, и trivikr.
Мы также хотим поблагодарить всех наших замечательных авторы, за все сообщения об ошибках, запросы на включение и за то, что поверили в наш проект!
Fastify v2 покрывается нашим циклом поддержки LTS, организованным следующим образом: не менее шести месяцев активной поддержки плюс шесть месяцев исправлений безопасности (после выпуска Fastify v3), в то время как Fastify v1 достигнет EOL 1 июня.
Удачного кодирования!
Команда Fastify