【n8n教程】Markdown节点,Markdown和HTML之间随意转换

n8n的Markdown节点可以帮助你轻松地在Markdown和HTML之间进行转换,而无需编写复杂代码或调用昂贵的API。

Markdown节点是什么?

Markdown节点是n8n中的一个数据转换工具,它可以在两种常见的文本格式之间进行快速转换:

这个节点使用了业界广泛使用的转换库(Showdown和node-html-markdown),确保转换质量和兼容性。

为什么你需要Markdown节点?

让我们看看实际应用场景:

📧 自动化邮件排版

如果你的AI生成的内容是Markdown格式,但邮件系统需要HTML,Markdown节点可以自动完成转换,无需手动处理。

📄 生成专业报告

将数据转换为格式精美的HTML报告,直接下载或通过邮件发送给客户。

🔄 内容迁移

从一个系统导出Markdown内容到另一个需要HTML的系统,自动化整个过程。

💰 节省成本

不再需要调用昂贵的AI API来处理基础格式转换 —— 这是Markdown节点相比其他解决方案最大的优势。

快速开始:5分钟上手

步骤1:添加Markdown节点到你的工作流

  1. 1. 在n8n编辑器中,点击左侧的**"Add node"**按钮
  2. 2. 在搜索框中输入**"Markdown"**
  3. 3. 选择**"Markdown"**节点并添加到画布

步骤2:配置转换模式

Markdown节点有两个基本参数:

参数说明示例
Mode(模式)选择转换方向:Markdown to HTML 或 HTML to MarkdownMarkdown to HTML
Input Field(输入字段)选择包含源内容的字段textcontent
Destination Key(目标键)指定输出数据的字段名html_output

步骤3:设置转换选项

根据你的需求,可以启用以下选项:

Markdown到HTML的常用选项:

HTML到Markdown的常用选项:

实战案例:构建一个邮件报告自动化工作流

现在让我们创建一个完整的可执行工作流,演示如何使用Markdown节点生成HTML邮件报告。

工作流说明

这个工作流会:

  1. 1. 接收一个包含用户信息和任务列表的Webhook请求
  2. 2. 使用Function节点生成格式化的Markdown文本
  3. 3. 使用Markdown节点将其转换为HTML
  4. 4. 将HTML报告转换为二进制格式
  5. 5. 将报告作为HTML文件提供下载

完整工作流JSON代码


    
    
    
  {
  "name"
: "Markdown报告生成工作流",
  "nodes"
: [
    {

      "parameters"
: {
        "path"
: "generate-report",
        "httpMethod"
: "POST",
        "responseMode"
: "onReceived"
      }
,
      "id"
: "webhook-trigger",
      "name"
: "Webhook",
      "type"
: "n8n-nodes-base.webhook",
      "typeVersion"
: 2,
      "position"
: [250, 300]
    }
,
    {

      "parameters"
: {
        "mode"
: "runOnceForAllItems",
        "jsCode"
: "// 生成格式化的Markdown报告\nconst data = $input.first().json;\n\nlet markdown = `# 📊 任务报告\\n\\n`;\nmarkdown += `**生成时间**: ${new Date().toLocaleString('zh-CN')}\\n\\n`;\nmarkdown += `## 项目信息\\n`;\nmarkdown += `- 项目名称: ${data.projectName || '未指定'}\\n`;\nmarkdown += `- 负责人: ${data.manager || '未指定'}\\n`;\nmarkdown += `- 优先级: ${data.priority || '中等'}\\n\\n`;\n\nmarkdown += `## 任务列表\\n\\n`;\nmarkdown += `| 任务 | 状态 | 完成度 |\\n`;\nmarkdown += `|------|------|--------|\\n`;\n\nif (data.tasks && Array.isArray(data.tasks)) {\n  data.tasks.forEach(task => {\n    markdown += `| ${task.name} | ${task.status} | ${task.progress}% |\\n`;\n  });\n}\n\nmarkdown += `\\n## 备注\\n`;\nmarkdown += `${data.notes || '暂无备注'}\\n\\n`;\nmarkdown += `---\\n`;\nmarkdown += `*此报告由n8n自动生成*`;\n\nreturn [{ json: { markdown_content: markdown } }];"
      }
,
      "id"
: "generate-markdown",
      "name"
: "Function - 生成Markdown",
      "type"
: "n8n-nodes-base.code",
      "typeVersion"
: 2,
      "position"
: [450, 300]
    }
,
    {

      "parameters"
: {
        "mode"
: "markdownToHtml",
        "markdown"
: "={{ $json.markdown_content }}",
        "markdownToHtmlOptions"
: {
          "completeHtmlDocument"
: false,
          "githubCodeBlocks"
: true,
          "tablesSupport"
: true,
          "automaticLinkingToUrls"
: true,
          "emojiSupport"
: true
        }
,
        "destinationKey"
: "html_output"
      }
,
      "id"
: "markdown-converter",
      "name"
: "Markdown - 转换为HTML",
      "type"
: "n8n-nodes-base.markdown",
      "typeVersion"
: 1,
      "position"
: [650, 300]
    }
,
    {

      "parameters"
: {
        "useRawData"
: true,
        "mimeType"
: "text/html"
      }
,
      "id"
: "binary-converter",
      "name"
: "Move Binary Data",
      "type"
: "n8n-nodes-base.moveBinaryData",
      "typeVersion"
: 1,
      "position"
: [850, 300]
    }

  ]
,
  "connections"
: {
    "Webhook"
: [
      {

        "node"
: "Function - 生成Markdown",
        "type"
: "main",
        "index"
: 0
      }

    ]
,
    "Function - 生成Markdown"
: [
      {

        "node"
: "Markdown - 转换为HTML",
        "type"
: "main",
        "index"
: 0
      }

    ]
,
    "Markdown - 转换为HTML"
: [
      {

        "node"
: "Move Binary Data",
        "type"
: "main",
        "index"
: 0
      }

    ]

  }
,
  "settings"
: {},
  "staticData"
: null,
  "pinData"
: {},
  "versionId"
: "bff19c9e-0c2a-4c9e-a08f-2e7f8f8f8f8f",
  "meta"
: {
    "instanceId"
: "n8n"
  }
,
  "active"
: false
}

如何导入这个工作流?

  1. 1. 复制上面的JSON代码
  2. 2. 打开n8n,点击右上角的三点菜单
  3. 3. 选择**"Import from URL"** 或 "Import from File"
  4. 4. 粘贴JSON代码
  5. 5. 点击**"Import"**

测试工作流

将以下JSON作为测试数据发送到Webhook:


    
    
    
  {
  "projectName"
: "n8n自动化项目",
  "manager"
: "张三",
  "priority"
: "高",
  "tasks"
: [
    {
 "name": "需求分析", "status": "已完成", "progress": 100 },
    {
 "name": "功能开发", "status": "进行中", "progress": 75 },
    {
 "name": "测试", "status": "未开始", "progress": 0 }
  ]
,
  "notes"
: "进展顺利,预计本周五完成所有开发工作。"
}

执行后,你会看到转换后的HTML报告被生成为二进制数据,可以直接下载。

常见错误和解决方案

❌ 问题1:转换后的HTML中特殊字符显示错误

原因:Markdown中的特殊字符未被正确处理

解决方案

❌ 问题2:表格在HTML中显示混乱

原因:未启用表格支持选项

解决方案

❌ 问题3:链接没有被识别

原因:自动链接识别未启用

解决方案

高级技巧

💡 技巧1:结合Function节点生成动态Markdown

使用JavaScript在Function节点中动态生成Markdown内容,然后通过Markdown节点转换,这样可以创建高度定制化的报告。

💡 技巧2:CSS样式应用

在Markdown中嵌入<style>标签,转换后的HTML会保留这些样式:


    
    
    
  <style>
table { border-collapse: collapse; }
th { background: #007bff; color: white; }
</style>


| 列1 | 列2 |
|-----|-----|
| 数据 | 数据 |

💡 技巧3:与邮件系统集成

将转换后的HTML直接通过Gmail或SendGrid节点发送,自动化邮件排版工作流:


    
    
    
  Webhook → Function(生成Markdown) → Markdown(转HTML) → Gmail(发送邮件)

总结

通过本教程,你已经学会了:

✅ Markdown节点的基本概念和使用方法
✅ 如何配置转换选项以满足不同需求
✅ 通过实战案例理解工作流集成
✅ 解决常见问题的方法
✅ 如何利用这个节点为你的自动化工作流提速

现在,你可以:


官方文档[1]
n8n系列教程[2]

引用链接

[1] 官方文档: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.markdown/
[2] n8n系列教程: https://www.undsky.com/blog/?category=n8n%E6%95%99%E7%A8%8B#