请教一个前端暂存数据的问题

2023-02-10 17:27:36 +08:00
 yanz123
我们有个功能会在前端记录客服的行为,积累了 5 分钟或者积累了 20 条记录就会调接口统一发到后端处理。
如果后端接口报错了,前端就会把这些记录继续暂存在前端,等接口恢复之后统一发给后端。
这种模式下前端可能会无限积累数据。
比较极端的情况是 前端把数据暂存在 localstorage 里面,localstorage 被修改后会有脏数据,这样前端把脏数据发到后端会报 4XX 错误,导致前端永远无法再调通后端接口,除非把 localstorage 清空。
不知道还有没有常见的情况会导致这种无法恢复的场景发生。
这种情况下通常应该怎么设计?
1.前端积累到一定的数据量之后,进入另一个逻辑,比如 100 条就分 5 段发送,有一段不成功就丢弃那段的所有数据?
2.不知道有没有更好的方法。
2919 次点击
所在节点    程序员
53 条回复
0x19921213
2023-02-10 17:30:28 +08:00
> 比较极端的情况是 前端把数据暂存在 localstorage 里面,localstorage 被修改后会有脏数据,这样前端把脏数据发到后端会报 4XX 错误,导致前端永远无法再调通后端接口,除非把 localstorage 清空。
这个是什么意思。
Chad0000
2023-02-10 17:30:51 +08:00
浏览器的数据库中?
yanz123
2023-02-10 17:32:13 +08:00
现在测试发现前端如果参数传错了的话,后端会返回 4XX 。 前端的数据是存在 localstorage 里面作为参数,如果参数被修改了,也会导致后端一直返回 4XX 。这样程序还没走到后端就失败了
zoharSoul
2023-02-10 17:37:20 +08:00
sqlite 不行吗? 我看客户端都是存这个里 一般
7911364440
2023-02-10 17:38:31 +08:00
cookie ?
renmu
2023-02-10 17:41:18 +08:00
你们的接口是经常会挂吗?加个最大重试次数呗
renmu
2023-02-10 17:42:03 +08:00
或者后端自己把脏数据洗了
yanz123
2023-02-10 17:42:26 +08:00
问题的根本在于 前端如果有脏数据了之后前端自己感知不到,只会再次往后端发数据,后端返回 4XX 后,前端发送不成功 继续累积数据。
darkengine
2023-02-10 17:43:04 +08:00
@zoharSoul sqlite 在 iOS/Android 上用,OP 问的应该是 web 的方案。

可以跟后端协商一个脏数据的 4xx error code 啊,尝试上传的时候返回这个 code 就清掉 localStorage 的数据。
Freakr
2023-02-10 17:43:36 +08:00
后端一律返回 200 ,解析不了的放另一个表里
stillsilly
2023-02-10 17:44:08 +08:00
@yanz123
数据格式错误定一个单独的错误码,如果是这个错误码,把 localstorage 里的数据全部清除
yanz123
2023-02-10 17:44:19 +08:00
接口并不会挂,今天测试的时候偶然发现,接口传错数据了会造成前端数据累积,引发的这个联想。
4XX 的时候,逻辑并没有进到后端,后端无法处理。
Chad0000
2023-02-10 17:45:59 +08:00
@darkengine 浏览器也就是 web 有数据库。
implion
2023-02-10 17:46:16 +08:00
不能在发送给服务器之前,从 localStorage 取出数据,然后校验下数据,再上传吗?你无法区分数据是不是脏数据?一般被服务器认为是脏数据,要么是数据格式不对,要么是时间戳不对
darkengine
2023-02-10 17:47:23 +08:00
@Chad0000 有关键字没,我也学下,我们的产品是全部怼到 localStorage 了。
implion
2023-02-10 17:48:02 +08:00
应该不是逻辑没进入后端,是后端用了数据格式校验的框架,在数据格式校验的时候就不通过,就给 throw 了
hqmJoker
2023-02-10 17:48:52 +08:00
这不是调用完就清数据就行?(不管成不成功)

因为如果本来数据有问题,还保存的话下次也会有问题。如果没有问题,那么这批数据就没用了,所以都得清掉,除非后端能返回更多的信息,根据返回信息清理旧数据。
llsquaer
2023-02-10 17:51:28 +08:00
后端数据错误或者不合理 返回 4xx 本来就合理

按正常逻辑怎么来的脏数据呢? 不妨前端优化下前端逻辑避免脏数据. 后端严卡数据进入.
yanz123
2023-02-10 17:52:02 +08:00
全部粗暴丢弃的话有一个弊端,就是可能不是数据脏了导致前端没有把数据发给后端,可能是后端挂了导致的,这样后端再重启后,前端其实是可以把这些数据传到后端的
dingjs
2023-02-10 17:53:23 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/914975

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX