не удается разрешить пользовательскую схему graphql - PullRequest
0 голосов
/ 01 марта 2020

Я пытаюсь настроить схему для сервера Apollo, и у меня возникает ошибка. Я не совсем уверен, как поставить этот вопрос, поэтому я опубликую текст / код, чем это необходимо.

"message": "Невозможно вернуть ноль для необнуляемого поля User.id."

Мои средства распознавания / индекс. 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;

Проблема в том, что я не знаю, как получить пользовательские данные о типе листинга

createBy на самом деле ID! поле, и я хотел бы, чтобы GraphQL получил данные пользователя для меня. Ниже приведен запрос, который я пытался использовать.

query {
listing(id: 35) 
{
    id
	title
	createdBy {
        id
        email
    }
}
}

Graphql новичок здесь. Я использую правильный подход? Я также могу предоставить репо git, если это необходимо. Как мне реорганизовать это, чтобы оно работало?

1 Ответ

0 голосов
/ 05 марта 2020

Graphql выдаст эту ошибку, если ваш резолвер возвращает нулевое значение для требуемого свойства.

похоже, что вы определили только резолверы для Mutation, Query и User, но вы хотите сделать еще один для листинга, который может быть использован для разрешения поля созданного. Я предположил бы, что это будет выглядеть примерно так:

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

...