使用Sanity.io遇未定义字段错误,无法获取Google登录用户信息
解决Sanity.io中
Encountered a field that is not defined in the schema错误 问题分析
你遇到的错误是因为GROQ查询中请求的userName和image字段,在Sanity的user类型Schema里未定义(或定义后未部署到云端),导致查询无法获取对应数据,进而用户头像和名称加载失败。
解决步骤
1. 检查并完善user Schema
找到本地Sanity项目中schemas目录下的user.js(或对应user类型的schema文件),确保其中包含userName和image字段的定义,示例代码如下:
export default { name: 'user', title: 'User', type: 'document', fields: [ { name: 'userName', title: 'User Name', type: 'string', }, { name: 'image', title: 'Profile Image', type: 'image', options: { hotspot: true // 支持头像裁剪定位 } }, // 保留其他已有的字段定义 ] }
2. 部署Schema到Sanity云端
在本地Sanity项目的根目录下,执行以下命令将更新后的Schema同步到线上数据库:
sanity deploy
执行完成后,云端的Schema会和本地保持一致,查询时就能识别userName和image字段。
3. 验证用户数据
通过Sanity Studio查看已创建的用户文档,确认userName和image字段是否有正确的数值(需确保Google登录流程中,已将返回的用户名和头像地址写入到Sanity数据库的对应字段中)。如果数据缺失,需要检查登录逻辑的写入环节。
补充说明
你的GROQ查询(如searchQuery、feedQuery中postedBy -> { _id, userName, image })明确请求了这两个字段,必须满足三个条件才能正常加载:Schema中存在对应定义、云端已部署该Schema、用户数据中存在这些字段的有效值。
内容的提问来源于stack exchange,提问作者Ryan Fernandes
相关产品推荐
相关产品推荐

