在文章的增删改操作后,系统现在会自动触发标签同步功能,无需手动点击"同步标签数据"按钮。这个功能通过异步方式实现,不会影响用户体验。
文件位置: packages/server/src/controller/admin/article/article.controller.ts
触发时机:
@Post()
- createArticle
)@Put('/:id')
- updateArticle
)@Delete('/:id')
- deleteArticle
)修改内容:
TagProvider
依赖syncTagsAsync('操作类型')
方法syncTagsAsync()
用于异步执行标签同步文件位置: packages/server/src/controller/admin/draft/draft.controller.ts
触发时机:
@Post('/publish')
- publish
)修改内容:
TagProvider
依赖syncTagsAsync('草稿发布')
方法syncTagsAsync()
用于异步执行标签同步文件位置: packages/server/src/controller/admin/ai-tagging/ai-tagging.controller.ts
触发时机:
@Put('/article/:id/tags')
- updateArticleTags
)修改内容:
TagProvider
依赖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 延迟,确保主要操作已完成
}
setTimeout
确保标签同步不阻塞主要的文章操作API响应系统中还保留了以下手动和自动同步点:
/admin/site/data?tab=tag
页面的"同步标签数据"按钮BackupController.importAll
)所有修改的控制器都已正确配置TagProvider依赖注入,因为TagProvider已经在 app.module.ts
的 providers
数组中注册。
可以通过控制台日志监控同步执行情况:
[操作类型] 标签数据同步完成
[操作类型] 标签数据同步失败: 错误信息
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!