Руководство по обработке ошибок в JavaScript

Nikita

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

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

Этот материал, посвящённый обработке ошибок в JavaScript, разбит на три части. Сначала мы сделаем общий обзор системы обработки ошибок в JavaScript и поговорим об объектах ошибок. После этого мы поищем ответ на вопрос о том, что делать с ошибками, возникающими в серверном коде (в частности, при использовании связки Node. js + Express. js). Далее — обсудим обработку ошибок в React. js. Фреймворки, которые будут здесь рассматриваться, выбраны по причине их огромной популярности. Однако рассматриваемые здесь принципы работы с ошибками универсальны, поэтому вы, даже если не пользуетесь Express и React, без труда сможете применить то, что узнали, к тем инструментам, с которыми работаете.

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

1. Ошибки в JavaScript и универсальные способы работы с ними

Если в вашем коде что-то пошло не так, вы можете воспользоваться следующей конструкцией.

В ходе выполнения этой команды будет создан экземпляр объекта Error и будет сгенерировано (или, как говорят, «выброшено») исключение с этим объектом. Инструкция throw может генерировать исключения, содержащие произвольные выражения. При этом выполнение скрипта остановится в том случае, если не были предприняты меры по обработке ошибки.

Объект Error

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

Генерирование и обработка ошибок

Конструкция try…catch

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

Блок finally

Асинхронные механизмы — коллбэки

Асинхронные механизмы — промисы

Асинхронные механизмы и try…catch

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

2. Генерирование и обработка ошибок в серверном коде

Теперь, когда у нас есть инструменты для работы с ошибками, посмотрим на то, что мы можем с ними делать в реальных ситуациях. Генерирование и правильная обработка ошибок — это важнейший аспект серверного программирования. Существуют разные подходы к работе с ошибками. Здесь будет продемонстрирован подход с использованием собственного конструктора для экземпляров объекта Error и кодов ошибок, которые удобно передавать во фронтенд или любым механизмам, использующим серверные API. Как структурирован бэкенд конкретного проекта — особого значения не имеет, так как при любом подходе можно использовать одни и те же идеи, касающиеся работы с ошибками.

В качестве серверного фреймворка, отвечающего за маршрутизацию, мы будем использовать Express. js. Подумаем о том, какая структура нам нужна для организации эффективной системы обработки ошибок. Итак, вот что нам нужно:

Разработка собственного конструктора объектов ошибок

Маршрутизация

Теперь, когда наш объект ошибки готов к использованию, нужно настроить структуру маршрутов. Как было сказано выше, нам требуется реализовать унифицированный подход к обработке ошибок, позволяющий одинаково обрабатывать ошибки для всех маршрутов. По умолчанию фреймворк Express. js не вполне поддерживает такую схему работы. Дело в том, что все его маршруты инкапсулированы.

Для того чтобы справиться с этой проблемой, мы можем реализовать собственный обработчик маршрутов и определять логику маршрутов в виде обычных функций. Благодаря такому подходу, если функция маршрута (или любая другая функция) выбрасывает ошибку, она попадёт в обработчик маршрутов, который затем может передать её клиентской части приложения. При возникновении ошибки на сервере мы планируем передавать её во фронтенд в следующем формате, полагая, что для этого будет применяться JSON-API:

Если на данном этапе происходящие кажется вам непонятным — не беспокойтесь — просто продолжайте читать, пробуйте работать с тем, о чём идёт речь, и постепенно вы во всём разберётесь. На самом деле, если говорить о компьютерном обучении, здесь применяется подход «сверху-вниз», когда сначала обсуждаются общие идеи, а потом осуществляется переход к частностям.

Вот как выглядит код обработчика маршрутов.

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

Теперь взглянем на файл маршрутов.

Ошибка «1с:enterprise integrity violation»

1сenterprise integrity violation

Сегодня примерно с 12:00 у многих пользователей 1С начали возникать ошибки «1с:enterprise integrity violation» («Обнаружено нарушение целостности системы») и «На сервере 1С:Предприятия произошла неисправимая ошибка» в Бухгалтерии предприятия. Данные ошибки вызваны не проверкой лицензионности продукта, как многие считают, а багом 1С.

Причина ошибки «1с:enterprise integrity violation»

Изначально многие считали, что 1С начала очередную попытку заблокировать работу пиратских версий 1С. Ошибка «1с:enterprise integrity violation» возникала у всех в разное время, на разных платформах и конфигурациях. Закономерность сразу определить не получилось. Изучив логи и временные файлы стало понятно, что это не очередная попытка 1С заблокировать пиратские версии, а просто баг.

Открыв просмотр событий Windows, можно заметить, что вылет 1С:Предприятия происходил из-за файла v8_xxx_xx.1CBarcodWin64_9_0_12_13.dll, который располагался в папке C:\Users\USR1CV8\AppData\Local\Temp\.

v8_xxx_xx.1CBarcodWin64_9_0_12_13.dll

Данный файл появляется там во время работы в 1С. Скорей всего разработчики выпустили обновление модуля работы со штрихкодами, которое не устанавливается или не догружается с серверов 1С. В следствии этого происходит сбой сервера 1С и он перезапускается с ошибкой «На сервере 1С:Предприятия произошла неисправимая ошибка» или «1с:enterprise integrity violation».

«На сервере 1С:Предприятия произошла неисправимая ошибка» или «1с:enterprise integrity violation»

Исправляем ошибку «1с:enterprise integrity violation»

Внимание! Дальше будет описано временное решение проблемы. Оно позволяет запустить и работать в 1С, но ошибка может все равно возникать при выполнении каких-нибудь действий. Например, ошибка может возникать при печати счета физическому лицу.
Если работа с баркодами необходима переходите к следующему разделу Решение с сохранением работы баркодов.

Мы уже выяснили, что ошибка возникает при обращении к файлу v8_xxx_xx.1CBarcodWin64_9_0_12_13.dll, который связан с модулем работы со штрихкодами. Компонента генерации изображений штрихкода подгружается в 1С при запуске 1С:Предприятия. Для ее отключения необходимо внести изменения в конфигурацию.

Открываем Модуль и закомментируем строку:

МенеджерОборудованияВызовСервера. ПодключитьКомпонентуГенерацииИзображенияШтрихкода();

Или можете подключить следующее расширение в базу данных через Конфигуратор — Конфигурация — Расширения конфигурации, которое сделает описанные выше действия за вас. Также расширение можно добавить через Администрирование — Печатные формы, отчеты и обработки — Расширения. Ссылка на расширение ниже:

Подключение расширения в 1С

Для исправления печати счета физическим лицам необходимо изменить функцию QRКодРеквизитыПлатежа в общем модуле ПечатьТорговыхДокументов.

В начало функции QRКодРеквизитыПлатежа необходимо написать Возврат Неопределено;. У вас должно получиться следующее:

Решение с сохранением работы баркодов

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

Подключить расширение в базу данных можно через Конфигуратор — Конфигурация — Расширения конфигурации. Также расширение можно добавить через Администрирование — Печатные формы, отчеты и обработки — Расширения. Ссылка на расширение ниже:

После сохранения конфигурации остановите Агент сервера 1С:Предприятие.

Остановить Агент сервера 1С:Предприятие

Теперь необходимо очистить папки с временными файлами. На сервере очищаем следующие папки:

На локальных машинах или на сервере терминалов необходимо очистить папки временных файлов каждого пользователя, который работает с 1С:

После очистки папок с временными файлами можно запустить Агент сервера и начать работу в 1С.

Некоторым помогает создание двух папок:

Если вы не видите ссылки или какую-то информацию в тексте — отключите блокировщик рекламы! Спасибо за понимание.

Источники:

https://medium. com/webbdev/js-6c7a3c5b4e61

https://pogrommist. ru/2021/04/oshibka-1s-enterprise-integrity-violation/

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: