Prisma Playground查询正常,前端返回picture字段始终为null
排查React中Apollo查询User.picture返回null的问题
嘿,我之前也碰到过类似的GraphQL字段返回空的情况,咱们一步步来揪出问题所在:
1. 先确认目标用户的picture字段确实有值
你在Playground里能查到picture,但要注意你React代码里查询的用户ID是cjgylfv6y004h0958tx9d8j9v,这个用户在数据库里的picture字段真的不是空值吗?有时候我们会不小心用错测试用户ID,导致查询的是另一个没有设置picture的用户,这是最容易忽略的点。
2. 检查Apollo客户端的缓存干扰
Apollo Client默认会缓存查询结果,如果之前你查询过这个用户,但当时的查询没有请求picture字段,缓存里的该用户对象就会缺少picture(或者是null)。你可以临时添加fetchPolicy: 'network-only'绕过缓存,验证是不是缓存的问题:
export default compose( graphql(USER_QUERY, { name: 'USER_QUERY', options: props => { return { variables: { userId: 'cjgylfv6y004h0958tx9d8j9v' }, fetchPolicy: 'network-only', // 强制从服务器获取最新数据 }; }, }), )(UserPic);
3. 验证服务器端获取的数据是否正确
在你的resolver里加个日志,看看从Prisma拿到的result里picture字段是不是有值:
async user(parent, args, ctx, info) { const { id } = args; const result = await ctx.db.query.user({ where: { id } }, info); console.log('从Prisma获取的用户数据:', result); // 新增日志 return result; },
如果日志里picture是有值的,但客户端收到的是null,那就要检查Apollo Server有没有配置字段过滤、权限控制之类的中间件,会不会不小心把picture字段过滤掉了。
4. 确认Schema和Datamodel的一致性
你的datamodel和schema里的User类型都定义了picture: String,看起来没问题,但可以再确认一下Prisma生成的模型文件(比如Prisma 2+的schema.prisma)里的User模型是否正确包含了picture字段,确保数据库迁移已经执行成功。
先从这几个方向排查,大概率是缓存或者数据存在性的问题,祝你早日解决!
内容的提问来源于stack exchange,提问作者Evanss
相关产品推荐
相关产品推荐

