sequlize处理并发请求的问题

发布于 2022-09-11 23:14:28 字数 1717 浏览 11 评论 0

做前端监控,建立了一个关系表,LogAndError,每天访问记录一条数据,保存页面加载次数,错误次数等字段。如果同时访问的话每天的记录会创建多条,而不是在同一条上更新。

代码如下:

static async addOrCreate(ctx, addType){
        let date = new Date()
        let formatTime = date.getFullYear() + '-'+(date.getMonth()+1) + '-' + date.getDate()
        // 查看某一天是否已经存在一条数据
        let res = await LogAndError.findOne({
            where: {
                webMonitorId: ctx.request.body.webMonitorId,
                happenTime: formatTime
            }
        })
        let updateObj = {}
        switch(addType){
            case 1:
                // js错误
                updateObj = {
                    jsErrorCount: sequelize.literal('jsErrorCount+1')
                }
                break;
            case 2:
                // 资源加载错误
                updateObj = {
                    resourceErrorCount: sequelize.literal('resourceErrorCount+1')
                }
                break;
            case 3:
                // 页面加载
                updateObj = {
                    loadCount: sequelize.literal('loadCount+1')
                }
                break;
        }
        // 存在的话就去更新数据中的字段
        if(res){
            return await LogAndError.update(
                updateObj,
                {
                    where: {
                        webMonitorId: ctx.request.body.webMonitorId,
                        happenTime: formatTime
                    }
                }
            )
        }else{
            // 不存在的话就去创建一条新的数据
            return await LogAndError.create(Object.assign(ctx.request.body,{happenTime: formatTime}))
        }
    }

如果多个请求同时出发,某一天的数据就会出现多条,这个该怎么解决?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文