给网站添加了文章自动保存功能,为了避免因为用户登录信息超时导致数据丢失

今天在网站写完一片文章后点击保存的时候提示用户信息失效,直接退出到了登录页面,导致之前写的内容没有保存,数据全部丢失。

之前就有预料到会出现这种情况,所以写的时候中间特地复制了一下内容,但是没想到后面有不小心复制了一下其他数据导致剪贴板的数据被覆盖,之前写的文章召回。

出现这个问题的原因是因为目前网站的设置的超时时间为两小时,在这个时间内不与服务器有请求交互的情况下,是不会重定向到登录页面的,但是一旦出现请求接口的情况,接口会判断登录超时从而返回对应的响应码,前端就会跳转到登录页面了。

为了解决这个问题,今天特地花了一下午的时候新增了一个自动保存的功能,在编辑文章的情况下,前端通过轮询,每过15秒去请求一次保存接口,这样就实现了自动保存的功能,但是这个地方有两点需要注意,第一个就是要区分新增跟保存,两种状态的区别就是是否需要带上id,第二个就是在自动保存接口成功后接口需要返回文章的Id,这样才能保证下一次的请求的参数正常,因为如果是新增,是不需要id的,但是新增成功后文章已经存在,在不关闭当前页面的情况下,下次保存就是编辑状态了,这个时候是需要当前文章的id来作为参数的。

那么如何在新增成功后返回id?这个需要修改mybatis 的xml 代码,在insert语句上添加 useGeneratedKeys="true" keyProperty="id"两个属性,表示开启生成key开关,对应的字段为id。

// serviceadminDao.insertOne(pagesDto);<br/>// mapper<resultMap id="PagesDto" 。。。><br/><insert id="insertOne" useGeneratedKeys="true" keyProperty="id">
        insert into pages(uid,title,content,cate,views,keywords,createBy,createDate) values (#{uid},#{title},#{content},#{cate},#{views},#{keywords},#{createBy},#{createDate})
    </insert>

由于通常情况下插入的类型是一个dto,所以它会自定将生成的id添加到当当前的dto中,然后通过PagesDto.getId()获取就可以拿到新生成的id了。

部署到网站后看到效果正常,心里得到了一丝安慰,不想在发生这种因为超时而导致数据丢失的问题不,笔者也不想去实现那个自动续期token的功能,目前看来这个已经能满足日常使用了。

本文章由javascript技术分享原创和收集

发表评论 (审核通过后显示评论):