如何避免从 ExpressJS 抛出 400 错误
Posted
技术标签:
【中文标题】如何避免从 ExpressJS 抛出 400 错误【英文标题】:How to Avoid throwing 400 errors from ExpressJS 【发布时间】: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
【问题讨论】:
【参考方案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
【讨论】:
以上是关于如何避免从 ExpressJS 抛出 400 错误的主要内容,如果未能解决你的问题,请参考以下文章
在 ExpressJS 响应中返回异步等待 try/catch 抛出错误 [重复]
Razor:asp-page-handler 不会触发处理程序并抛出 400 错误
FireBase 在第一轮循环后抛出 WebException 400