用途:这是一套 Evernote SDK 生产级开发模式,用于实现复杂笔记操作、批量处理、搜索查询,并优化 SDK 调用。前提是已完成安装与认证,并了解 Evernote 数据模型(Notes、Notebooks、Tags、Resources),熟悉 async/await 与 Promise。
主要能力:
- 搜索:用 NoteFilter 设置查询词与排序,配合 NotesMetadataResultSpec 只取所需元数据字段,避免拉取全文;示例 filter 使用 words: 'tag:important notebook:Work',order 为 NoteSortOrder.UPDATED,再调用 findNotesMetadata(filter, 0, 100, spec)。
- 带附件创建笔记:对文件 buffer 计算 MD5,创建 Resource 并设置 data.body、mime,在 ENML 中用 en-media type/hash 嵌入,再赋值 note.resources 后 createNote。
- 错误处理封装:区分 EDAMUserException(客户端错误)、EDAMSystemException(限流、维护)、EDAMNotFoundException(无效 GUID),用 error.rateLimitDuration 做重试延迟。
- 批量操作:按可配置延迟顺序处理,遇限流等待 rateLimitDuration 秒后重试,并用回调跟踪进度。
- 标签与笔记本管理:实现 getOrCreateTag() 与 getOrCreateNotebook() 幂等操作,创建前用 listTags()/listNotebooks() 检查存在性。
常见错误处理:RATE_LIMIT_REACHED 用 rateLimitDuration 并在批处理项间加延迟;BAD_DATA_FORMAT 因无效 ENML,发送前用 wrapInENML() 校验;DATA_CONFLICT 因并发修改,重新获取元数据再重试;QUOTA_REACHED 因存储满,通过 user.accounting 检查剩余配额。
限制:资料未提供具体价格、平台范围或官方收录信息;完整九种模式的实现细节需查阅其 Implementation Guide,进一步笔记创建流程可参考 evernote-core-workflow-a。