Как избежать выбрасывания 400 ошибок из ExpressJS - PullRequest
5 голосов
/ 24 апреля 2019

Справочная информация: Я получаю 400 ошибок (и пустой ответ на 400 страницах) из искаженного файла cookie на моем сайте (с одной из моих партнерских страниц).Я написал код для удаления куки, но некоторые из моих клиентов все еще получают ошибку, потому что они находятся в их кеше.Как только они очищают свой кеш, проблема исправлена.

Эта проблема полностью решена в моей кодовой базе .NET путем простого игнорирования ошибки 400. Я хотел бы сделать то же самое в Express JS.

Ask: Я хотел бы, чтобы экспресс игнорировал все файлы cookie при ошибке 400 (часто вызванной дефектными файлами cookie) или, по крайней мере, игнорировал ошибку все вместе.Есть ли способ сделать это?

Моя функция ClearDefectiveCookies для справки (работает правильно)

const clearDefectiveCookies = (req, res, next) => {
  const cookies = req.cookies;
  const defectiveCookies = Object.keys(cookies).filter(key => typeof cookies[key] === 'string' && (cookies[key].charAt(0) === '='));

  if (defectiveCookies.length > 0) {
    defectiveCookies.forEach(defectiveCookie => {
      res.clearCookie(defectiveCookie);
    });
  }

  next();
};

Проблемный файл cookie для справки

Имя: xyz_123 и значение: =NaN=xyz=123

Ответы [ 2 ]

4 голосов
/ 03 мая 2019

Возможно, проблема в том, как вы называете res.clearCookie.Если вы посмотрите в документацию , там написано:

Веб-браузеры и другие совместимые клиенты будут очищать cookie только в том случае, если указанные параметры идентичны параметрам, указанным для res.cookie(),исключая expires и maxAge.

Таким образом, чтобы очистить файлы cookie, вам нужно будет предоставить второй аргумент в качестве объекта, указывая путь.

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

Таким образом, ответ на самом деле заключается в том, что в ноябре 2018 года произошел критический сдвиг узла, проблема заключается не в cookie, а в том, что у узла максимальный размер файла cookie, вызывающий 400 ошибок. Это на самом деле не экспресс ..

См. Ответ здесь: Почему я получаю 400 ошибок? Узел, Экспресс, ReactJS

...