You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 09:05:27