Приложение стека MERN случайно сломалось после 6 месяцев работы и выдает следующую ошибку: «Ошибка типа: r.filter не является функцией» - PullRequest
0 голосов
/ 16 мая 2019

Я написал критически важное приложение с использованием стека MERN для клиента, и оно работает без сбоев уже более 6 месяцев. Сегодня мой клиент уведомил меня, что при входе в приложение представление «Панель мониторинга» мигает на экране, а затем исчезает, выдавая эту ошибку: TypeError: r.filter не является функцией.

Представление Dashboard выполняет AJAX-вызов на сервер и извлекает количество билетов из базы данных, которые затем сохраняются в Redux, а затем классифицируются и отображаются в браузере. В этом компоненте используется несколько методов массива, например:

  const awaiting = tickets.filter(
    ticket =>
      (ticket.status === 'Return to Provider' ||
        ticket.status === 'Require survey') &&
      !ticket.closed
  );

  const unassigned = tickets.filter(
    ticket => ticket.status === 'Unassigned'
  );

  const pending = tickets.filter(ticket => ticket.status === 'Issued');

  const active = tickets.filter(
    ticket =>
      ticket.status === 'On field' ||
      ticket.status === 'Provisioning required by client'
  );

  const complete = tickets.filter(
    ticket =>
      (ticket.status === 'Complete' ||
        ticket.status === 'Complete to activate at a later date') &&
      !ticket.closed
  );

Ошибка выдается при первом методе .filter. Если я это закомментирую, выдается ошибка на следующем и так далее. Та же самая ошибка выдается везде, где используется метод массива, и это точное сообщение об ошибке:

TypeError: r.filter is not a function
at t.value (Dashboard.js:99)
at Mi (react-dom.production.min.js:3785)
at Pi (react-dom.production.min.js:3776)
at ji (react-dom.production.min.js:3960)
at Ba (react-dom.production.min.js:5514)
at $a (react-dom.production.min.js:5536)
at Mu (react-dom.production.min.js:5958)
at Cu (react-dom.production.min.js:5925)
at ku (react-dom.production.min.js:5860)
at Xa (react-dom.production.min.js:5787)

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

ПРИМЕЧАНИЕ. Это ТОЛЬКО происходит, когда я подключаюсь к производственной базе данных, которая содержит более 2000 билетов (более 30 МБ данных), независимо от того, подключаюсь ли я из среды локального хоста или из производственной среды.

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

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

Как я уже говорил, производственное приложение работало без сбоев в течение последних 6 месяцев. Что может вызвать такую ​​случайную ошибку, которая может привести к разрыву приложения?

1 Ответ

0 голосов
/ 16 мая 2019

Может быть несколько причин, по которым filter() может не работать в вашей ситуации.Можете ли вы указать сетевой ответ, который вы получаете?Это был бы хороший способ начать отладку.

Здесь есть две основные точки отказа:

  1. Ответ исходит от бэкэнда или не приходит вообще (ошибка на стороне сервера, которая кажется вероятной причиной, потому что ваше приложение внезапно сломалось)

  2. Что-то не так с кодом на стороне клиента

Ответиз бэкэнда может выйти из строя по ряду причин.Вы можете проверить:

  • Истечение срока действия сертификата SSL
  • Среда Ошибка неправильной функции
  • Ответ очень велик (как вы сказали, 30 МБ, в этом случае вы можетеиспользовать и обязательно использовать нумерацию страниц)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...