无法解析自定义对象 graphql 架构

Posted

技术标签:

【中文标题】无法解析自定义对象 graphql 架构【英文标题】:cannot resolve custom object graphql schema 【发布时间】:2020-06-13 23:04:13 【问题描述】:

我正在尝试为 Apollo Server 设置架构,但遇到了错误。我不太确定如何提出这个问题,所以我会发布必要的文本/代码。

"message": "不能为不可为空的字段 User.id 返回 null。"

我的解析器/index.js 如下所示:

import * as Mutation from "./Mutation";
import * as Query from "./Query";
import User from "./User";

const resolvers =  Mutation, Query, User ;

console.log(resolvers);
export default resolvers;

产生以下输出:


Mutation: 
  createListing: [Getter],
  updateListing: [Getter],
  deleteListing: [Getter],
  createUser: [Getter]
,

Query:  listings: [Getter], listing: [Getter], userLogin: [Getter] ,

User: [AsyncFunction: user]

我的 typeDefs 文件是这样的

import  gql  from "apollo-server";

const typeDefs = gql`
	type Listing 
		description: String!
		id: ID!
		title: String!
		createdBy: User!
	

	type User 
		id: ID!
		email: String!
	

	type AuthData 
		id: ID!
		token: String!
		expiresIn: String!
	

	input UserInput 
		email: String!
		password: String!
	

	input ListingInput 
		id: ID
		title: String!
		description: String!
	

	type Mutation 
		createUser(userInput: UserInput): User!
		createListing(listingInput: ListingInput): Listing!
		updateListing(listingInput: ListingInput): Listing!
		deleteListing(id: ID!): Boolean!
	

	type Query 
		listings: [Listing!]!
		listing(id: ID!): Listing!
		userLogin(userInput: UserInput): AuthData!
	
`;

export default typeDefs;

问题是我不知道如何获取列表类型的用户数据

createdBy 实际上是 ID!字段,我希望 graphQL 为我获取用户数据。以下是我一直在尝试使用的查询。

query 
listing(id: 35) 

    id
	title
	createdBy 
        id
        email
    

Graphql 初学者在这里。我是否使用了正确的方法? 如果需要,我还可以提供 git repo。如何重新组织它以使其正常工作?

【问题讨论】:

listing(id) 解析器?不返回 createdBy 的用户类型 - 可能仅从数据库列表记录中返回用户 id .. 使用加入 【参考方案1】:

如果您的解析器为所需属性返回 null,Graphql 将抛出此错误。

您似乎只为MutationQueryUser 定义了解析器,但您需要为列表创建另一个可用于解析 createdBy 字段的解析器。我想它看起来像这样:

Listing.js

const Listing = 
  createdBy: (root, args, ctx) => 
    //code to fetch actual user goes here, you'd presumably have some kind of
    //id on the listing like 'creator' that refers to a user id which you could
    //access from the root like root.creator
    return 
      id: '1',
      email: 'foo@bar.com'
    
  


export default Listing

【讨论】:

以上是关于无法解析自定义对象 graphql 架构的主要内容,如果未能解决你的问题,请参考以下文章

Schema Generator 无法确定 DTO 中自定义对象的 GraphQL 输出类型

将自定义 GraphQL 解析器和类型添加到 Prisma/Nexus 架构中

类型 Graphql 自定义解析器

解析graphql查询后实现自定义逻辑

无法将自定义结果从解析器传递到 Graphql

如何在 GraphQL 中创建自定义对象列表