10分钟搞定CodiMD批量管理:API脚本实现文档高效迁移
你还在手动一个个导出CodiMD文档?团队知识库迁移时复制粘贴到崩溃?本文将带你用简单脚本实现文档批量导入导出,让100个文档的迁移工作5分钟内完成。读完你将获得:
✅ 免代码基础的API调用方法
✅ 完整批量操作脚本模板
✅ 常见错误排查指南
为什么需要批量操作工具?
CodiMD作为实时协作Markdown编辑器,深受团队喜爱。但当需要迁移知识库、备份历史文档或批量更新权限时,手动操作 becomes 效率黑洞。官方文档public/docs/features.md提到支持单个文档的导入导出,但未提供批量方案。通过分析API功能源码,我们发现可以利用内部接口实现自动化操作。
准备工作:获取访问凭证
在开始前,需要准备:
- CodiMD实例地址(如
https://codimd.example.com) - 管理员账号的API Token(在个人设置-开发者选项中生成)
- 安装Node.js环境(推荐v14+)
安全提示:API Token拥有文档操作权限,请勿分享给他人。可在配置文件中设置token有效期。
批量导出脚本:一键备份所有文档
以下脚本会导出当前用户所有可访问文档为Markdown文件,保存到./exports目录:
const fs = require('fs');
const axios = require('axios');
// 配置区
const CODIMD_URL = 'https://你的CodiMD实例地址';
const API_TOKEN = '你的API令牌';
const EXPORT_DIR = './exports';
// 创建导出目录
if (!fs.existsSync(EXPORT_DIR)) {
fs.mkdirSync(EXPORT_DIR, { recursive: true });
}
// 获取文档列表
async function fetchNotes() {
try {
const response = await axios({
method: 'GET',
url: `${CODIMD_URL}/api/notes`,
headers: { 'Authorization': `Bearer ${API_TOKEN}` }
});
return response.data;
} catch (error) {
console.error('获取文档列表失败:', error.message);
process.exit(1);
}
}
// 导出单个文档
async function exportNote(noteId) {
try {
const response = await axios({
method: 'GET',
url: `${CODIMD_URL}/${noteId}/download`,
headers: { 'Authorization': `Bearer ${API_TOKEN}` },
responseType: 'text'
});
const fileName = `${EXPORT_DIR}/${noteId}.md`;
fs.writeFileSync(fileName, response.data);
console.log(`已导出: ${fileName}`);
} catch (error) {
console.error(`导出失败 ${noteId}:`, error.message);
}
}
// 批量导出主函数
async function batchExport() {
const notes = await fetchNotes();
console.log(`发现${notes.length}个文档,开始导出...`);
for (const note of notes) {
await exportNote(note.id);
}
console.log('批量导出完成!文件保存在', EXPORT_DIR);
}
// 执行导出
batchExport();
使用方法:
- 安装依赖:
npm install axios - 替换配置区信息
- 运行:
node export-all.js
批量导入脚本:快速重建知识库
当需要将本地Markdown文件批量导入CodiMD时,使用以下脚本:
const fs = require('fs');
const axios = require('axios');
const path = require('path');
// 配置区
const CODIMD_URL = 'https://你的CodiMD实例地址';
const API_TOKEN = '你的API令牌';
const IMPORT_DIR = './imports'; // 存放待导入.md文件的目录
// 读取目录下所有Markdown文件
function getMdFiles() {
return fs.readdirSync(IMPORT_DIR)
.filter(file => path.extname(file) === '.md')
.map(file => path.join(IMPORT_DIR, file));
}
// 创建新文档
async function createNote(title, content) {
try {
const response = await axios({
method: 'POST',
url: `${CODIMD_URL}/api/notes`,
headers: {
'Authorization': `Bearer ${API_TOKEN}`,
'Content-Type': 'application/json'
},
data: {
title,
content,
permission: 'editable' // 权限:freely/editable/limited/locked/protected/private
}
});
return response.data.id;
} catch (error) {
console.error('创建文档失败:', error.message);
return null;
}
}
// 批量导入主函数
async function batchImport() {
const files = getMdFiles();
console.log(`发现${files.length}个待导入文件...`);
for (const file of files) {
const content = fs.readFileSync(file, 'utf8');
const title = path.basename(file, '.md');
const noteId = await createNote(title, content);
if (noteId) {
console.log(`已创建: ${title} (ID: ${noteId})`);
}
}
console.log('批量导入完成!');
}
// 执行导入
batchImport();
权限说明:可通过修改
permission参数设置文档访问权限,详见权限控制表
高级技巧:文档批量更新
结合YAML元数据功能,可以批量更新文档属性。例如统一添加标签或修改权限:
// 批量更新所有文档添加标签
async function addTagToAllNotes(tag) {
const notes = await fetchNotes();
for (const note of notes) {
const content = await fetchNoteContent(note.id);
// 检查是否已有YAML元数据
if (content.startsWith('---\n')) {
// 已有元数据,追加标签
const updatedContent = content.replace('---\n', `---\ntags: ${tag}\n`);
await updateNoteContent(note.id, updatedContent);
} else {
// 添加新元数据
const updatedContent = `---\ntags: ${tag}\n---\n${content}`;
await updateNoteContent(note.id, updatedContent);
}
console.log(`已更新: ${note.id}`);
}
}
YAML元数据支持的完整参数见官方文档,可批量设置标题、描述、GA统计等高级属性。
常见问题与解决方案
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 403权限错误 | Token无效或权限不足 | 重新生成Token,确保账号有管理员权限 |
| 导出文件为空 | 文档包含大量图片 | 先运行图片本地化脚本,参考图片处理模块 |
| 导入乱码 | 文件编码非UTF-8 | 添加编码转换:fs.readFileSync(file, 'gbk') |
| 批量操作被限制 | 触发API速率限制 | 添加延迟:await new Promise(resolve => setTimeout(resolve, 1000)) |
安全与效率提示
- 操作备份:执行批量操作前,建议通过历史记录功能备份重要文档
- 增量操作:生产环境建议先对少量文档测试脚本
- 性能优化:大量文件(>100个)建议使用异步并发控制
- 日志记录:添加详细日志便于排查错误,参考日志模块
通过以上脚本,即可实现CodiMD文档的高效批量管理。无论是定期备份、迁移服务器还是团队协作,都能大幅提升工作效率。需要更多功能可参考API文档扩展脚本功能。
提示:本文脚本已在CodiMD 2.4.1版本测试通过,其他版本可能需要调整API端点。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




