如何使用Sanity发布文档?前端创建Sanity数据库文档的查询方法
前端创建Sanity CMS文档的实现方法
在前端通过Sanity Client库创建文档,核心是使用create方法,以下是具体代码示例和注意事项:
1. 基础创建代码
首先确保已初始化Sanity Client实例,然后执行创建操作:
import { createClient } from '@sanity/client' // 初始化客户端 const client = createClient({ projectId: '你的项目ID', dataset: '你的数据集名称', apiVersion: '2024-05-20', // 使用最新日期格式的API版本 useCdn: false, // 写入操作禁用CDN token: '你的写入权限Token' // 从Sanity后台生成,需具备Editor及以上权限 }) // 创建新文档的异步函数 async function createDocument() { try { const newDoc = await client.create({ _type: 'post', // 必须与Sanity Schema定义的文档类型完全匹配 title: '我的第一篇文章', content: '这是文章的正文内容', author: '张三' // 字段需对应Schema定义 }) console.log('文档创建成功,ID:', newDoc._id) } catch (err) { console.error('创建失败:', err) } } // 调用执行 createDocument()
关键注意事项
- 权限Token:必须使用具备写入权限的Token,在Sanity Studio的「Settings > API > Tokens」中创建,勾选对应权限
- 文档类型匹配:
_type字段必须和你在Schema中定义的类型一致,否则会触发验证错误 - API版本:建议使用最新的日期格式版本,避免兼容性问题
发布Sanity文档的方法
Sanity文档默认创建后为草稿状态,需发布才能通过CDN被前端读取,有两种常用方式:
1. 创建时直接发布
在create方法的第二个参数中添加publish: true,即可创建完成后直接发布:
const newDoc = await client.create({ _type: 'post', title: '已发布的文章', content: '这篇文章创建后直接发布' }, { publish: true })
2. 单独发布草稿文档
如果已存在草稿文档,可通过文档ID调用publish方法发布:
async function publishDoc(docId) { try { await client.patch(docId) .setIfMissing({ publishedAt: new Date().toISOString() }) // 可选:自定义发布时间字段 .publish() console.log('文档发布成功') } catch (err) { console.error('发布失败:', err) } } // 传入目标文档ID执行发布 publishDoc('abc123xyz')
3. 新增/更新并发布(Upsert)
如果需要实现「不存在则创建,存在则更新」并直接发布,可使用upsert方法:
async function upsertAndPublish() { try { await client.upsert({ _id: 'custom-doc-id', // 可选:自定义文档ID,不填则自动生成 _type: 'post', title: '更新后的标题', content: '更新后的内容' }, { publish: true }) console.log('文档新增/更新并发布成功') } catch (err) { console.error('操作失败:', err) } }
发布注意事项
- 发布操作同样需要具备写入权限的Token
- 若文档包含引用字段,确保关联文档状态正常(如需发布关联文档,需单独处理)
- 发布后Sanity会自动生成
_publishedAt字段,也可自定义publishedAt字段记录发布时间
内容的提问来源于stack exchange,提问作者NICOLO' TESEO
相关产品推荐
相关产品推荐

