当前位置: 首页 > Web前端 > JavaScript

搭建个人知识付费应用系统-(六)Sanity集成

时间:2023-03-27 10:23:05 JavaScript

视频地址:https://www.bilibili.com/video...Sanity建模官网及文档:https://www.sanity.io/#启动Sanity服务yarnaddsanity@dev-previewsanity-plugin-markdown@studio-v3#客户端调用yarnadd@sanity/client创建Sanity配置文件sanity.config.ts:import{createConfig}from'sanity';从'sanity/desk'导入{deskTool};从'sanity-plugin-markdown'导入{markdownSchema};导出默认createConfig({名称:'default',标题:'willin.wang',projectId:'crrougir',数据集:'生产',插件:[deskTool(),markdownSchema()],架构:{类型:[{标题:'帖子',名称:'帖子',类型:'文档',字段:[{名称:'标题',title:'Title',type:'string'},{name:'slug',title:'Slug',type:'slug',options:{source:'title'}},{name:'内容',标题:'内容',类型:'降价'},{名称:'摘录',标题:'摘录',类型:'字符串'},{标题:'标签',名称:'标签',类型:'数组',of:[{type:'reference',to:[{type:'tag'}]}]},{name:'lang',title:'Language',type:'string',initialValue:'zhCN'}]},{name:'tag',title:'Tag',type:'document',字段:[{name:'name',title:'Name',type:'object',fields:[{name:'zhCN',title:'简体中文',type:'string'},{name:'enUS',title:'English',type:'string'}]},{name:'slug',title:'Slug',type:'slug',options:{source:'title'}}]}]}});配置文件包含:文章类型声明需要根据文章类型添加标签类型声明:区分页面、文章、代码片段(做视频忘记了)本地启动sanity服务:npxsanitystart访问:http://localhost:3333登录并管理内容。Sanity客户端调用包importcreateClientfrom'@sanity/client';constsanityConfig={projectId:process.env.SANITY_PROJECT_ID||'crrougir',数据集:process.env.SANITY_DATASET||'production',useCdn:process.env.NODE_ENV!=='production',apiVersion:'2021-03-25'};exportconstsanityClient=createClient(sanityConfig);exportconstpreviewClient=createClient({...sanityConfig,useCdn:false,token:process.env.SANITY_API_TOKEN});exportconstgetClient=(preview)=>(preview?previewClient:sanityClient);因为默认允许有两个数据集,其中一个是Production,可以使用previewClient访问开发环境。Sanity查询GROQ查询语言:https://www.sanity.io/docs/groq需要好好看看,折腾了半天没看懂。终于有一个例子可以正确运行。constpostFields=`_id,title,excerpt,lang,tags[]->{name,"slug":slug.current},"slug":slug.current,`;exportconstpostQuery=`{"post":*[_type=="post"&&slug.current==$slug]|order(_updatedAtdesc)[0]{content,${postFields}}}`;注意标签,我折腾了好久。编写测试接口:import{json}from'@remix-run/node';import{postQuery}from'~/lib/query';import{getClient}from'~/lib/sanity';exportconstloader=async()=>{constdata=awaitgetClient().fetch(postQuery,{slug:'test'});返回json(数据);};

猜你喜欢