如何避免从 ExpressJS 抛出 400 错误
How to Avoid throwing 400 errors from ExpressJS
背景: 我从我网站上的格式错误的 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
可能是你调用的方式有问题res.clearCookie
。如果您查看 documentation,它会显示:
Web browsers and other compliant clients will only clear the cookie if the given options is identical to those given to res.cookie()
, excluding expires and maxAge.
因此,为了清除 cookie,您必须提供第二个参数作为对象,提供路径。
所以答案实际上是节点在 2018 年 11 月发生了重大变化,问题不是 cookie,而是节点的最大 cookie 大小导致了 400 错误。它实际上不是表达..
在这里查看答案:
背景: 我从我网站上的格式错误的 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
可能是你调用的方式有问题res.clearCookie
。如果您查看 documentation,它会显示:
Web browsers and other compliant clients will only clear the cookie if the given options is identical to those given to
res.cookie()
, excluding expires and maxAge.
因此,为了清除 cookie,您必须提供第二个参数作为对象,提供路径。
所以答案实际上是节点在 2018 年 11 月发生了重大变化,问题不是 cookie,而是节点的最大 cookie 大小导致了 400 错误。它实际上不是表达..
在这里查看答案: