提问者:小点点

PUT,POST,DELETE-请求已取消


获取:

很难指出原因并提供细节。 简单地说,有一个Angular+Express.js应用程序,MySQL用于数据库,Nginx用于代理服务器,使用Docker将所有内容粘合在一起。

  • 当请求需要~110+毫秒才能完成时,会出现此问题。
  • 仅PUT,POST,DELETE方法受影响(GET可以正常工作)。
  • 浏览器显示一个请求被取消,但是实际的代码工作(例如express.js完成了逻辑并更新了MySQL数据库)。
  • 已在Chrome和Firefox上验证(因此不是浏览器问题)。

因此,只要使用任何长时间运行的异步任务(例如setTimeout(()=>{},1000),浏览器中的请求就会获得取消状态。

所以想弄清楚。 它是express.js设置吗? NginX设置? 角度httpclient

总而言之,一切都是在引擎盖下进行的。 但是浏览器收到的状态是canceled,这使得无法跟踪操作结果并通知用户操作已经完成。

Nginx日志返回:

nginx_1        | 172.18.0.1 - - [01/Aug/2020:12:49:19 +0000] "PUT /api/tags/update HTTP/1.1" 499 0 "http://localhost:8081/tags" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36

Angular TypeScript代码如下所示:

this.httpClient
   .put<Tag>(`/api/tags/${slug}`, data)
   .pipe(takeUntil(this.unsubscribe$))
   .subscribe();

共1个答案

匿名用户

您可能正在对组件ngondestroy钩子中可观察到的http调用request.unsubscribe()。 导致请求被“取消”