0

反応スターター キット ボイラープレートで Express Graphql を使用しており、エラーが発生したときに独自のネストされたスキーマを定義しようとしてError: Availability.rooms field type must be Output Type but got: undefined. います。フィールドの種類を変更し、解決をネストされたフィールドに移動しましたが、構文エラーがあると思います。

schema.js

import {
  GraphQLSchema as Schema,
  GraphQLObjectType as ObjectType,
} from 'graphql';

import hotel from './queries/hotel';

const schema = new Schema({
  query: new ObjectType({
    name: 'Query',
    fields: {
      hotel,
    },
  }),
});

export default schema;

hotel.js

import {
  GraphQLObjectType as ObjectType,
  GraphQLList as List,
  GraphQLString as StringType,
  GraphQLBoolean as BooleanType,
  GraphQLInt as IntType,
  GraphQLNonNull as NonNull,
} from 'graphql';

import { checkAvailability } from './hotels';

const RoomType = new ObjectType({
  name: 'Room',
  fields: {
    name: { type: new NonNull(StringType) },
    roomTypeCategory: { type: new NonNull(StringType) },
    nights: { type: new NonNull(IntType) },
    isAvailable: { type: new NonNull(BooleanType) },
    startDate: { type: new NonNull(StringType) },
    endDate: { type: new NonNull(StringType) },
    availability: { type: new List(BooleanType) },
  },
});

const AvailabilityType = new ObjectType({
  name: 'Availability',
  args: {
    hotelId: { type: new NonNull(StringType) },
    checkIn: { type: new NonNull(StringType) },
    checkOut: { type: new NonNull(StringType) },
    numberOfAdults: { type: new NonNull(IntType) },
  },
  fields: { rooms: new List(RoomType) },
  async resolve({ request }, { hotelId, checkIn, checkOut, numberOfAdults }) {
    const rooms = await checkAvailability({
      hotelId,
      checkIn,
      checkOut,
      numberOfAdults,
    });
    return { rooms };
  },
});

export default {
  type: new ObjectType({
    name: 'Hotels',
    fields: {
      availability: { type: AvailabilityType },
    },
  }),
};
4

1 に答える 1

0

そのはず:

fields: {
    rooms: {type: new List(RoomType) }
}

typeフィールドは(resolveたとえば)以外のプロパティを取得できるため、typeプロパティを持つオブジェクトを渡す必要があります。あなたがそれらの残りのためにしたことと同じように。

于 2017-01-08T08:52:18.303 に答える