vanblog标签同步机制
编辑
2025-06-13
建站教程
00

目录

文章操作自动同步标签数据功能实现
功能说明
实现的功能点
1. 文章相关操作 (ArticleController)
2. 草稿相关操作 (DraftController)
3. AI标签相关操作 (AITaggingController)
技术实现细节
异步执行机制
关键特性
现有的同步触发点
用户体验改进
依赖注入配置
日志监控

文章操作自动同步标签数据功能实现

功能说明

在文章的增删改操作后,系统现在会自动触发标签同步功能,无需手动点击"同步标签数据"按钮。这个功能通过异步方式实现,不会影响用户体验。

实现的功能点

1. 文章相关操作 (ArticleController)

文件位置: packages/server/src/controller/admin/article/article.controller.ts

触发时机:

  • ✅ 创建新文章 (@Post() - createArticle)
  • ✅ 更新文章信息 (@Put('/:id') - updateArticle)
  • ✅ 删除文章 (@Delete('/:id') - deleteArticle)

修改内容:

  • 注入 TagProvider 依赖
  • 在每个操作完成后调用 syncTagsAsync('操作类型') 方法
  • 新增私有方法 syncTagsAsync() 用于异步执行标签同步

2. 草稿相关操作 (DraftController)

文件位置: packages/server/src/controller/admin/draft/draft.controller.ts

触发时机:

  • ✅ 草稿发布为文章 (@Post('/publish') - publish)

修改内容:

  • 注入 TagProvider 依赖
  • 在草稿发布完成后调用 syncTagsAsync('草稿发布') 方法
  • 新增私有方法 syncTagsAsync() 用于异步执行标签同步

3. AI标签相关操作 (AITaggingController)

文件位置: packages/server/src/controller/admin/ai-tagging/ai-tagging.controller.ts

触发时机:

  • ✅ AI为文章更新标签 (@Put('/article/:id/tags') - updateArticleTags)

修改内容:

  • 注入 TagProvider 依赖
  • 在AI标签更新完成后调用 syncTagsAsync('AI标签更新') 方法
  • 新增私有方法 syncTagsAsync() 用于异步执行标签同步

技术实现细节

异步执行机制

typescript
展开代码
/** * 异步同步标签数据,不阻塞主要操作 */ private syncTagsAsync(operation: string) { // 使用 setTimeout 确保异步执行,不影响主要业务流程 setTimeout(async () => { try { await this.tagProvider.syncTagsFromArticles(); // 触发标签相关页面的ISR更新 this.isrProvider.activeUrl('/tag', false); this.isrProvider.activePath('tag'); console.log(`[${operation}] 标签数据同步完成`); } catch (error) { console.error(`[${operation}] 标签数据同步失败:`, error.message); } }, 100); // 100ms 延迟,确保主要操作已完成 }

关键特性

  1. 异步执行: 使用 setTimeout 确保标签同步不阻塞主要的文章操作API响应
  2. 延迟执行: 100ms延迟确保主要操作完全完成后再执行同步
  3. 错误处理: 包含完整的错误处理和日志记录
  4. ISR触发: 同步完成后触发标签相关页面的增量静态重新生成
  5. 操作标识: 通过operation参数标识触发同步的具体操作类型

现有的同步触发点

系统中还保留了以下手动和自动同步点:

  1. 手动同步: /admin/site/data?tab=tag 页面的"同步标签数据"按钮
  2. 数据导入后: 备份恢复时自动同步 (BackupController.importAll)
  3. 文章操作后: 新增的自动同步功能

用户体验改进

  • ✅ 文章创建、更新、删除后标签数据自动保持同步
  • ✅ 草稿发布后标签数据自动更新
  • ✅ AI标签功能使用后自动同步
  • ✅ 操作响应速度不受影响(异步执行)
  • ✅ 标签页面数据实时更新(ISR触发)
  • ✅ 无需手动维护标签数据一致性

依赖注入配置

所有修改的控制器都已正确配置TagProvider依赖注入,因为TagProvider已经在 app.module.tsproviders 数组中注册。

日志监控

可以通过控制台日志监控同步执行情况:

  • 成功: [操作类型] 标签数据同步完成
  • 失败: [操作类型] 标签数据同步失败: 错误信息
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!