Мини-безопасный параметр catch в Javascript? - PullRequest
0 голосов
/ 11 октября 2019

После минимизации моего JavaScript-приложения с помощью плагина Terser веб-пакета эта функция перехвата работает некорректно в браузере

        .catch((error)=> {
            vm.loginError = true;
            vm.loading = false;

            if (!error || !error.error){return};

            if (error.error.indexOf('user exists')) {
                <!-- expecting this line to run when error.error contains "user exists" but this line is never executed -->
                vm.emailTakenError = true;
            } else {
                vm.serverGeneralError = true;
            }
        });

В этом примере серверная часть отправляет объект ошибки, содержащий свойство error, установленное на "пользователь существует ".

{"status":"error","error_message":"user exists","error":"user exists"}

Браузер должен иметь возможность анализировать объект ошибки и читать error.error, но не может.

Используя не минимизированный код, скрипт работает правильно ибраузер выполняет строку «vm.emailTakenError = true».

В командной строке консоли браузера после минимизации возвращая error.error выдает эту ошибку (Chrome Dev Tools):

Uncaught ReferenceError: ошибка не определена в eval (eval at (signup.ts: 92),: 1: 1)

Как ни странно, используя исходные карты в минимизированном коде в Chrome Dev Tools, консоль может проанализировать ошибку. свойство error, использующее указатель мыши, но не в качестве Watch, ни в окне браузера, ни каким-либо другим методом.

Также загадочно, что эта строка никогда не запускается:

if (!error || !error.error){return};

Код также не работает в Firefox.

Есть ли у меня проблема с минификатором, с кодом или с чем-то еще? Как это решить?

1 Ответ

0 голосов
/ 11 октября 2019

Загадка решена благодаря @ Ry.

Проблема заключалась в комбинации сред и минификации.

В локальной (не минимизированной) среде бэкэнд-сервис передает другую строкук функции catch

error.error.indexOf('user exists') == 148 // true

В нашей среде Staging / Prod мы получаем другие результаты, причуду нашего сервера.

error.error.indexOf('user exists') === 0 // true

Так что error.error.indexOf('user exists') возвращает ложное значение,поэтому условие не выполняется.

Далее, оператор debugger не работает в минимизированном коде, по крайней мере, в этом случае.

...