Рубрики
Без рубрики

Как написать сообщения об ошибках, которые не сосут

Джастин Фуллером «Произошла ошибка проверки». Ага. Спасибо! Выпуск неизбежен; Это последнее обновление, которое необходимо проверить, и я получаю сообщение об ошибке, которое так же полезно, как кнопка закрытия на лифте. Оказывается, это ошибка проверки, вид

Автор оригинала: FreeCodeCamp Community Member.

Джастин Фуллер

«Произошла ошибка проверки». Ага. Спасибо!

Выпуск неизбежен; Это последнее обновление, которое необходимо проверить, и я получаю сообщение об ошибке, которое так же полезно, как кнопка закрытия на лифте.

Оказывается, это это Ошибка проверки, вид. Вход, который я даю, является дубликатом. Это действительно, он просто уже существует!

Разве это не так полезно знать это?

На самом деле было бы полезно быть проинформированным о нескольких вещах, когда случаются ошибки. Мне не нужно все знать. История программирования не поможет мне здесь. Сообщение должно дать мне достаточно информации для меня, чтобы исправить эту ошибку, чтобы я мог закончить свою работу, идти домой и играть со своими детьми.

Что делает ошибку?

В JavaScript объект ошибки всегда имеет имя, сообщение и свойства стека. Имя дает вам классификацию ошибки AT-Glant. Стек рассказывает вам, где это произошло. Сообщение? Ну, по мнению некоторых разработчиков, вам не нужно беспокоиться об этом! «Трассировка стека дает вам все, что вам нужно».

Пожалуйста, не будьте одним из тех разработчиков.

Полезные сообщения об ошибках

Поднимите правую руку, поместите левую руку на копию «Clean Code» и повторите после меня.

«Я клянусь, чтобы включить достаточно детали в мои сообщения об ошибках, что будущие разработчики легко смогут определить, что пошло не так, и что им нужно сделать, чтобы исправить это».

Что случилось

Когда сотрудник полиции вытягивает вас, чтобы дать вам билет, говорит ли это «плохое вождение»? Нет! Он говорит, что вы собираетесь 65 миль в час в 25 милях в час школьной зоны, вы проходили остановленную автобус, а ваша машина не была проверена через четыре года! Конечно, вы собираетесь в тюрьму, но, по крайней мере, вы знаете Почему Отказ

Таким образом, сообщение об ошибке ранее не должно быть, «Произошла ошибка проверки», но вместо этого:

Unable to save model "user" because the property "email" with value "JustinFuller@company.com" already exists.

Вместо простой ошибки, которая говорит: «Неверный вариант» использовать:

The option "update" is not valid. Valid options include "upsert", "get", and "delete".

Эти обновленные сообщения об ошибках пытаются помочь нам понять причину, давая нам начало к решению.

Как это могло случиться

Теперь, когда ошибка описывает, что именно пошло не так, пришло время помочь плохой душе, который наткнулся на это затруднение, начнут обратно. Смотреть внимательно. Когда сделано правильно, это похоже, что вы продвигаетесь через время, предвидя то, что могло привести к этому неудачному повороту событий. Вы будете прямо там с этим будущим разработчиком – может быть, вы говорите им, что все в порядке, что вы пройдете через это вместе.

Вы начнете, объясняя, что произошло.

Для всего, что имеет предварительный этап, такой как конфигурация или проверка, вы можете предложить убедиться, что шаг завершен. Не волнуйтесь, если ваши сообщения об ошибках получают долго. Лучше предоставить слишком много информации, чем недостаточно.

Я добавлю более подробно в один из более ранних примеров:

The option "update" is not valid. Valid options include "upsert", "get", and "delete". If you expected "update" to be an option, you must first export it from the file: "./src/controllers/index.js".

Теперь вы ожидаете, как это могло случиться: разработчик, вероятно, просто забыл экспортировать новый вариант. Ошибка становится напоминанием о том этапе. Теперь вы показали две возможные причины ошибки; Первый – это возможное опечатка (вот допустимые варианты), а вторая – ошибка конфигурации (вот где она должна быть экспортирована).

Библиотека RACT представляет собой отличную работу в ожидании того, как произошло ошибки. Они не обращаются к каждому краю, но они дают полезные подсказки для наиболее распространенных ошибок. Например, вы не можете использовать функцию Reactom.rendertonodeString () В браузере, потому что потоки узла там не существуют. Так что реагировать дает вам предложение о том, как это произошло и как это исправить:

ReactDOMServer.renderToNodeStream(): The streaming API is not available in the browser. Use ReactDOMServer.renderToString() instead.

Могут быть другие пути для этой ошибки, но они догадаются, что наиболее распространенная причина в том, что RENDERTNODESTREAM был вызван в браузере.

Соответствующие данные

При записи сообщений об ошибках вы должны помнить, что приложения редко делают только одну вещь одновременно. Поэтому, когда возникают ошибки, это сложно найти состояние приложения в то время. По этой причине очень важно захватить соответствующие данные и решить его обратно к разработчику, чтобы они могли определить причину.

В первом примере я включал фразу:

The property "email" with value "JustinFuller@company.com" already exists.

Это очень полезно, но может быть непрактично. Это может потребовать слишком много усилий или времени для создания ошибок натурального языка для каждой вариации данных, или в некоторых случаях мы можем просто пройти отказ от за пределами нашего собственного контроля, поэтому единственный оставшийся вариант – дать хорошее описание и включить столько соответствующих данных, которые безопасны для печати.

Выбор того, какие данные безопасны для печати, сложно: если вы выбираете именно какие свойства, чтобы включить, чтобы вы в конечном итоге модифицируете список каждый раз, когда есть новое свойство, или, хуже, вы забыли, и это не появляется при необходимости ; С другой стороны, вы можете удалить свойства, которые, как известно, небезопасно, но здесь вы рискуете добавлять новую недвижимость и забыть об этом исключить его, вызывая утечные конфиденциальные данные. Вы должны использовать свое суждение и рассмотреть правила вашей компании. Ваше программное обеспечение рассматривает очень ценные или личные данные, которые не должны записываться в не зашифрованное место назначения? Бездумно введя каждый объект, который вызывает ошибку, подлежит увольнению с некоторых рабочих мест, в то время как у других это стандартная операционная процедура. Поэтому, пожалуйста, используйте здравый смысл и будьте осторожны!

Неожиданные ошибки

Существует два способа включения соответствующих данных, когда вы точно не знаете, какое свойство или действие вызвало ошибку.

Первый должен использоваться, когда вы намереваетесь прочитать ошибку людей, вы вкладываете данные прямо в сообщение: Ошибка была получена: «Дублирующая запись, найденная для пользователя .email», в то время как upserting пользователь: {"Email": «Justinfuller@company.com»}. Этот стиль ошибок имеет свои недостатки, такие как весь объект, помещенный в сообщение об ошибке, который может быть отправлен где-то непреднамеренным. Если, однако, вы знаете, что это безопасно, тогда этот стиль имеет преимущество в том, что он имеет преимущество в том, чтобы дать подробную информацию о ситуации.

В других случаях вы не хотите, чтобы данные были утечны к файлу журнала или ответ API. Вы можете предоставить ссылочный идентификатор, отметку времени, которая может быть вручную или автоматически ссылаться на данные позже, или какое-то другое свойство, которое позволит разработчику отслеживать точку данных Pesky, которая вызвала ошибку.

Ожидаемые ошибки

Я буду первым, кто признал, что я склоннуюсь сделать простые ошибки. Я набираю «UPSWERT» вместо «упсурта»; Я введите «NPM TES» вместо «NPM Test». Так что это действительно освежает, когда я получаю сообщение об ошибке:

Unknown command, "npm tes". Did you mean npm test?

Когда разработчики подготовлены для этого, они, очевидно, смотрели в будущее и увидели, что кто-то сделает, что опечатка – или, может быть, они просто знают, что люди склонны к глупым ошибкам.

Всякий раз, когда есть шаг в процессе, который может пойти как предсказуемо неправильно, у вас есть возможность подготовить четкое руководство по тому, что пошло не так и как это исправить.

Шаги, чтобы исправить проблему

Для некоторых ошибок можно будет дать решение ошибки вместо того, чтобы просто сообщить, что это произошло. В некоторых случаях это будет легко, как раньше, когда мы показали правильные варианты после случайного ввода «обновления» вместо «Upsert». В других случаях вам нужно будет приложить больше усилий, чтобы дать пользователю достаточно информации, чтобы исправить свою ошибку, вроде бы, если вы обнаружили рекурсивную зависимость, и вам нужно сказать им, где цикла и что они должны сделать, чтобы удалить его Отказ

Ошибка, которая не отстой

Итак, вы хотите предоставить полезные сообщения об ошибках? В следующей ошибке вы пишете, попробуйте включить полное описание того, что произошло, как это произошло, любые соответствующие данные, которые безопасны для включения, и любые шаги, которые могут помочь решить проблему.

Привет, я Джастин Фуллер. Я так рад, что вы читаете мой пост! Мне нужно сообщить вам, что все, что я написал здесь, является моим собственным мнением и не предназначено для того, чтобы каким-либо образом представлять моего работодателя. Все образцы кода являются моими собственными и полностью не связаны с кодом Банка Америки.

Я также хотел бы услышать от вас, пожалуйста, не стесняйтесь связываться со мной на LinkedIn , Github или Средний Отказ Спасибо снова за чтение!