【问题标题】:How to Avoid throwing 400 errors from ExpressJS如何避免从 ExpressJS 抛出 400 错误
【发布时间】:2019-09-14 05:53:41
【问题描述】:

背景:我的网站上的一个格式错误的 cookie(来自我的一个附属页面)收到 400 个错误(以及一个空白的 400 页响应)。我已经编写了删除 cookie 的代码,但我的一些客户仍然收到错误,因为它在他们的缓存中。一旦他们清除缓存,问题就解决了。

这个问题在我的 .NET 代码库中通过简单地忽略 400 错误而被完全规避,我想在 Express JS 中做同样的事情。

问:我想在出现 400 错误(通常由有缺陷的 cookie 引起)时明确忽略所有 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

【问题讨论】:

    标签: javascript express cookies session-cookies http-status-code-400


    【解决方案1】:

    可能问题出在您调用res.clearCookie 的方式上。如果你查看documentation,它会说:

    Web 浏览器和其他合规客户端仅在给定选项与res.cookie() 相同的选项(不包括 expires 和 maxAge)时才会清除 cookie。

    因此,为了清除 cookie,您必须提供第二个参数作为对象,提供路径。

    【讨论】:

    • 嘿 Shimon,谢谢回复。它确实可以正常工作并且正确地摆脱了 cookie。但似乎中间件可能会在抛出 400 错误之前完成它。不知道如何让它一起忽略 400 错误,因为我的代码成功删除了损坏的 cookie
    【解决方案2】:

    所以答案实际上是节点在 2018 年 11 月发生了重大变化,问题不是 cookie,而是节点的最大 cookie 大小导致 400 错误。它实际上不是快递..

    在此处查看答案:Why am I getting 400 errors? Node, Express, ReactJS

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-28
      • 2012-01-18
      相关资源
      最近更新 更多