2.0 KiB
2.0 KiB
问题分析
-
问题现象:用户点击删除按钮删除本地规则时,通过API发送数据到服务器,但Web界面没有自动刷新本地规则列表。
-
问题根源:
- 后端
RemoveRule方法存在缺陷,当删除规则时没有正确更新所有相关映射 - 前端代码虽然调用了重新加载规则列表的函数,但由于后端数据不一致,导致刷新后列表没有变化
- 后端
-
具体问题:
- 在
shield/manager.go的RemoveRule方法中,删除域名规则时只从domainRules或domainExceptions映射中删除了规则,但没有更新domainRulesIsLocal、domainExceptionsIsLocal、domainRulesSource和domainExceptionsSource映射 - 处理正则表达式规则时,使用了错误的比较方式(
re.pattern.String() != pattern),而应该使用原始规则字符串进行比较
- 在
修复方案
-
修复
RemoveRule方法:- 当删除域名规则时,同时更新所有相关映射
- 当删除排除规则时,同时更新所有相关映射
- 修复正则表达式规则的比较方式,使用原始规则字符串进行比较
-
验证前端代码:
- 确认前端代码在删除规则后正确调用了重新加载规则列表的函数
- 验证前端代码处理API响应的逻辑是否正确
实现步骤
-
修改
shield/manager.go文件中的RemoveRule方法:- 在删除域名规则时,添加删除
domainRulesIsLocal和domainRulesSource映射的代码 - 在删除排除规则时,添加删除
domainExceptionsIsLocal和domainExceptionsSource映射的代码 - 修复正则表达式规则的比较方式
- 在删除域名规则时,添加删除
-
测试修复后的功能:
- 启动DNS服务器
- 访问Web界面,添加几条本地规则
- 点击删除按钮删除其中一条规则
- 验证规则列表是否自动刷新,且删除的规则不再显示
预期结果
- 用户点击删除按钮后,规则被成功删除
- Web界面自动刷新,删除的规则从列表中消失
- 本地规则文件被正确更新,删除的规则不再存在于文件中