【问题标题】:cannot resolve custom object graphql schema无法解析自定义对象 graphql 架构
【发布时间】: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 .. 使用加入

标签: node.js graphql apollo-server


【解决方案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

【讨论】:

    猜你喜欢
    • 2020-02-21
    • 2017-01-07
    • 2021-12-22
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 2020-10-04
    • 1970-01-01
    相关资源
    最近更新 更多