现代家务机器人核心技术解析与选购指南
2026/10/29 5:29:03
在 Node.js 环境将 Tiptap 的 JSON 内容转换为 Markdown,有两种推荐方式,使用官方@tiptap/markdown扩展(最新版本支持良好)。
先确保安装:
npminstall@tiptap/markdown @tiptap/starter-kit# 如果有其他扩展(如 Image、Table 等),一并安装然后在 Service 中创建 MarkdownManager 实例:
import{Injectable}from'@nestjs/common';import{MarkdownManager}from'@tiptap/markdown';importStarterKitfrom'@tiptap/starter-kit';import{Markdown}from'@tiptap/markdown';// 需要导入 Markdown 扩展本身// 导入其他扩展...// import Image from '@tiptap/extension-image';// import Table from '@tiptap/extension-table';// 等constextensions=[StarterKit,Markdown,// 必须包含 Markdown 扩展来启用序列化// Image,// Table,// 其他扩展...];constmarkdownManager=newMarkdownManager({extensions,// 传递所有 extensions,包括 Markdown});@Injectable()exportclassTiptapService{// JSON → MarkdownjsonToMarkdown(json:any):string{returnmarkdownManager.serialize(json);}// 额外:如果需要 Markdown → JSONmarkdownToJson(markdown:string):any{returnmarkdownManager.parse(markdown);}}使用示例(在 Controller 或其他地方):
constjsonFromDB={type:'doc',content:[...]};// 从数据库取的 Tiptap JSONconstmarkdown=this.tiptapService.jsonToMarkdown(jsonFromDB);// markdown 就是字符串,如 "# Title\n\n**Bold** text"这种方式完全服务端兼容、无 DOM 依赖、最轻量高效。
如果你已经在其他地方用了 Editor,也可以这样:
import{Editor}from'@tiptap/core';importStarterKitfrom'@tiptap/starter-kit';import{Markdown}from'@tiptap/markdown';// 其他扩展...constextensions=[StarterKit,Markdown,// 必须包含// 其他...];@Injectable()exportclassTiptapService{jsonToMarkdown(json:any):string{consteditor=newEditor({extensions,content:json,// 直接传入 JSONelement:null,// 关键:服务端不绑定 DOM});constmarkdown=editor.getMarkdown();editor.destroy();// 用完销毁,避免内存泄漏returnmarkdown;}}注意事项:
Markdown扩展,否则getMarkdown()或serialize()不生效。Markdown.configure({markedOptions:{gfm:true},})renderMarkdown来正确序列化(参考官方文档)。这样就能在 NestJS 服务端安全地将 Tiptap JSON 转换为 Markdown 了。更多细节见官方文档:https://tiptap.dev/docs/editor/markdown