Files
dns-server/.trae/documents/修复本地规则管理不工作的问题.md
2025-11-28 18:41:55 +08:00

2.0 KiB
Raw Blame History

问题分析

  1. 问题现象用户点击删除按钮删除本地规则时通过API发送数据到服务器但Web界面没有自动刷新本地规则列表。

  2. 问题根源

    • 后端RemoveRule方法存在缺陷,当删除规则时没有正确更新所有相关映射
    • 前端代码虽然调用了重新加载规则列表的函数,但由于后端数据不一致,导致刷新后列表没有变化
  3. 具体问题

    • shield/manager.goRemoveRule方法中,删除域名规则时只从domainRulesdomainExceptions映射中删除了规则,但没有更新domainRulesIsLocaldomainExceptionsIsLocaldomainRulesSourcedomainExceptionsSource映射
    • 处理正则表达式规则时,使用了错误的比较方式(re.pattern.String() != pattern),而应该使用原始规则字符串进行比较

修复方案

  1. 修复RemoveRule方法

    • 当删除域名规则时,同时更新所有相关映射
    • 当删除排除规则时,同时更新所有相关映射
    • 修复正则表达式规则的比较方式,使用原始规则字符串进行比较
  2. 验证前端代码

    • 确认前端代码在删除规则后正确调用了重新加载规则列表的函数
    • 验证前端代码处理API响应的逻辑是否正确

实现步骤

  1. 修改shield/manager.go文件中的RemoveRule方法:

    • 在删除域名规则时,添加删除domainRulesIsLocaldomainRulesSource映射的代码
    • 在删除排除规则时,添加删除domainExceptionsIsLocaldomainExceptionsSource映射的代码
    • 修复正则表达式规则的比较方式
  2. 测试修复后的功能:

    • 启动DNS服务器
    • 访问Web界面添加几条本地规则
    • 点击删除按钮删除其中一条规则
    • 验证规则列表是否自动刷新,且删除的规则不再显示

预期结果

  • 用户点击删除按钮后,规则被成功删除
  • Web界面自动刷新删除的规则从列表中消失
  • 本地规则文件被正确更新,删除的规则不再存在于文件中