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

如何为Gatsby页面查询创建自定义resolver 隐藏非公开视频URL

问题原因

你之前的写法存在层级错误:url 是 SanityVideo 类型的自有字段,不是 SanityCourses.playlist 的配置项,所以挂载在 SanityCourses 下的 resolver 永远不会被触发。

解决方案

你可以直接重写 SanityVideo 类型的 url 字段解析逻辑,两种实现方式任选其一即可:

方案1:使用 createResolvers 实现

将以下代码写入 gatsby-node.js:

exports.createResolvers = ({ createResolvers }) => {
  const resolvers = {
    SanityVideo: {
      url: {
        resolve(source) {
          // source为当前video对象,public为false时返回空值
          return source.public ? source.url : null
        }
      }
    }
  }
  createResolvers(resolvers)
}

方案2:使用 createSchemaCustomization 显式定义

将以下代码写入 gatsby-node.js:

exports.createSchemaCustomization = ({ actions, schema }) => {
  const { createTypes } = actions
  const typeDefs = [
    schema.buildObjectType({
      name: "SanityVideo",
      fields: {
        url: {
          type: "String",
          resolve(source) {
            return source.public ? source.url : null
          }
        }
      }
    })
  ]
  createTypes(typeDefs)
}

生效操作

修改完成后执行 gatsby clean 清除本地缓存,再重启开发服务即可生效。非公开视频的 url 字段会返回 null,不会暴露原始地址,你可以根据业务需要把返回值替换为空字符串、权限提示文本等。


内容的提问来源于stack exchange,提问作者André Casal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 10:54:03