如何向Sanity CMS POST提交项目数据
向Sanity项目写入数据实现方案
Sanity Studio 本身就是调用官方标准HTTP API完成数据新增操作,只要走官方标准写入链路,写入效果和在Studio手动新增完全一致,会自动触发Schema校验、Webhook回调、搜索索引更新,写入后的数据可直接在Studio中查看管理。
前置准备
- 从项目根目录的
sanity.config文件中获取三个核心配置:projectId(项目ID)、dataset(数据集名称,默认一般为production)、apiVersion(API版本号) - 安装官方服务端客户端:执行命令
npm install @sanity/client - 生成写入权限凭证:进入Sanity项目后台的API管理页,创建一个拥有编辑权限的Token,注意该Token仅可在服务端、本地脚本环境使用,严禁泄露到前端公开代码中
初始化写入客户端
import { createClient } from '@sanity/client' const sanityClient = createClient({ projectId: '替换为你的项目ID', dataset: '替换为你的数据集名', apiVersion: '替换为你的API版本号,例如2024-01-01', token: '替换为你生成的编辑权限Token', useCdn: false // 写入操作必须关闭CDN,直连源站接口 })
执行数据写入
写入的数据结构必须和你在Sanity中定义的Schema规则完全匹配,必填字段缺失、字段格式错误时会返回和Studio操作完全一致的校验报错。
- 单条数据新增:
// 示例:写入一个类型为post的文章文档,字段对应你自己定义的Schema即可 const newDoc = { _type: 'post', title: '测试文章标题', publishAt: new Date().toISOString(), body: '文章正文内容' } const createResult = await sanityClient.create(newDoc) console.log('写入成功,文档ID:', createResult._id)
- 批量数据新增:
如果要一次性写入多条数据,用事务方法做原子提交,和Studio批量导入逻辑一致,性能更高:
const batchTransaction = sanityClient.transaction() // 遍历待写入的数据列表,逐个加入提交队列 yourDataList.forEach(dataItem => { batchTransaction.create({ _type: '替换为你的文档类型名', ...dataItem }) }) // 提交所有写入操作 const batchResult = await batchTransaction.commit()
关键注意点
- 不建议自行拼接裸POST请求调用接口,官方客户端已经封装好了鉴权签名、格式校验、错误处理逻辑,能保证和Studio的写入行为100%对齐
- 如果需要写入图片、文件类资产,要先通过客户端的
assets.upload方法上传文件拿到资产引用,再把引用填入对应字段,逻辑和Studio里手动上传文件完全一致 - 写入操作默认会自动生成文档ID、更新时间等系统字段,和Studio手动新增的字段规则完全相同,不需要手动传这些系统字段
内容的提问来源于stack exchange,提问作者Dev-Siri
相关产品推荐
相关产品推荐

