2017-02-21 5 views
1

Я пытаюсь удалить магазин из хранилища. Я продолжаю получать сообщение об ошибке:Ошибка при попытке использовать NODE_DELETE для обновления хранилища ретрансляции. Uncault Error: RelayMutationQuery: ожидаемое поле `хранит` на` viewer`, чтобы быть подключением

Непринятая ошибка: RelayMutationQuery: Ожидаемое поле stores на viewer будет соединением.

Мой объект зритель что-то вроде этого:

{ 
    "__dataID__":"VXNlcjp2aWV3ZXJfZml4ZWQ=", 
    "id":"VXNlcjp2aWV3ZXJfZml4ZWQ=", 
    "stores":{ 
    "__dataID__":"client:-1121235371", 
    "edges":[ 
     { 
     "__dataID__":"client:-1121235372", 
     "node":{ 
      "__dataID__":"U3RvcmU6NTg0MmIwODE1ZDY0NTY1NWU4NTVhOTc1", 
      "id":"U3RvcmU6NTg0MmIwODE1ZDY0NTY1NWU4NTVhOTc1", 
      "_id":"5842b0815d645655e855a976", 
      "address":null, 
      "closingHours":null, 
      "contactNumber":null, 
      "name":"s5", 
      "openingHours":null, 
      "isActive":true 
     } 
    }, 
    { 
     "__dataID__":"client:-1121235373", 
     "node":{ 
      "__dataID__":"U3RvcmU6NThhYmM2ZjcyNTgyNjI5NDVhYzZkMGEx", 
      "id":"U3RvcmU6NThhYmM2ZjcyNTgyNjI5NDVhYzZkMGEx", 
      "_id":"58abc6f7258262945ac6d0a2", 
      "address":null, 
      "closingHours":null, 
      "contactNumber":null, 
      "name":"Dete", 
      "openingHours":null, 
      "isActive":true 
     } 
    } 
    ] 
    } 
} 

И мой файл мутации:

import Relay from 'react-relay'; 

export default class DeleteStoreMutation extends Relay.Mutation { 
    getMutation() { 
    return Relay.QL`mutation{ DeleteStoreMutation }`; 
    } 

    getFatQuery() { 
    return Relay.QL` 
     fragment on DeleteStoreMutationPayload { 
     viewer 
     deletedId 
     } 
    `; 
    } 

    getConfigs() { 
    console.log(this.props.viewer); 
    return [{ 
     type: 'NODE_DELETE', 
     parentName: 'viewer', 
     parentID: this.props.viewer.id, 
     connectionName: 'stores', 
     deletedIDFieldName: 'deletedId' 
    }]; 
    } 

    getVariables() { 
    return { 
     _id: this.props.storeId, 
    }; 
    } 
} 

GraphQL Schema index.js

import { UserType } from './types' 
import { GraphQLObjectType, GraphQLSchema } from 'graphql' 
import { nodeField, nodeInterface } from './node' 
import modules from './modules' 
import { AuthService } from '../services' 

let RootQuery = new GraphQLObjectType({ 
    name: 'RootQuery', 
    fields: { 
    viewer: { 
     type: UserType, 
     resolve: async ({ viewerId }) => AuthService.getViewer(viewerId) 
    }, 
    node: nodeField 
    } 
}); 


let RootMutation = new GraphQLObjectType({ 
    name: "RootMutation", 
    fields:() => ({ ...modules.mutations }) 
}); 

let schema = new GraphQLSchema({ 
    query: RootQuery, 
    mutation: RootMutation 
}); 

экспорт схемы по умолчанию;

UserType.js фрагмент

const UserType = new GraphQLObjectType({ 
    name: 'User', 
    description: 'A user', 
    fields:() => ({ 
    id: globalIdField(), 
    _id: { 
     type: GraphQLID 
    }, 
    stores: { 
     type: StoreConnection, 
     resolve: (user) => StoreService.getStores(user) 
    }, 
    }), 

    interfaces: [nodeInterface] 
}); 

магазин-подключение-type.js

import { GraphQLObjectType, GraphQLList, GraphQLNonNull } from 'graphql'; 
import PageInfo from './page-info-type' 
import Cursor from './cursor-type' 
import StoreType from './store-type' 

const StoreEdge = new GraphQLObjectType({ 
    name: 'StoreEdge', 
    fields:() => ({ 
    cursor: { 
     type: Cursor, 
     resolve: (store) => ({ value: store._id.toString() }) 
    }, 
    node: { 
     type: StoreType, 
     resolve: (store) => store 
    }, 
    }), 
}); 

const StoreConnection = new GraphQLObjectType({ 
    name: 'StoreConnection', 
    fields:() => ({ 
    edges: { 
     type: new GraphQLList(StoreEdge), 
     resolve: (stores) => stores 
    }, 
    pageInfo: { 
     type: PageInfo, 
     resolve:() => ({hasNextPage: false, hasPreviousPage: false}) 
    }, 
    }), 
}); 

export default StoreConnection; 

GraphiQL Screenshot

+0

Можете ли вы предоставить определение своего типа Viewer из вашей схемы GraphQL? Я подозреваю, что «магазины» - это список, а не соединение. – NevilleS

+0

@NevillS Я обновил вопрос с дополнительной информацией. Любая помощь будет большой. Благодаря тонну. –

+0

ОК, так что * * похоже, что ваше поле 'stores' является допустимым соединением GraphQL. Однако логика запроса мутации ретрансляции не согласуется, поэтому она должна действовать по некоторой неполной информации. – NevilleS

ответ

0

Похоже, что (вероятно) вопрос здесь в том, что построение запроса логика мутации путается неполной информацией. Я подозреваю, что это просто тяжело с вашим жирным запросом - теоретически данные должны быть доступны на локальном графике, но я не уверен на 100%, на каком этапе выполняются эти типы защитных проверок.

Я рекомендовал бы обновить свой жир запрос, чтобы быть более конкретным:

Relay.QL` 
     fragment on DeleteStoreMutationPayload { 
     viewer { 
      stores 
     } 
     deletedId 
     } 
` 

Я около 50% уверен, что это то, что мутация конфигурации ожидает увидеть, когда вы даете ему одновременно parentName и connectionName.

+0

Да, я уверен, что все. Сообщение об ошибке может быть немного более полезным здесь (я думаю, проблема в том, что «магазины» не находятся в жирном запросе, а не в том, что «магазины» не являются соединением). Но наличие сверхспецифичных сообщений об ошибках не всегда так просто! – NevilleS

+0

Я пробовал то, что вы предлагаете, к сожалению, ошибка все тот же :( –

+0

ОК, возможно, тип мутации на стороне сервера неудобен. Можете ли вы добавить это и к вопросу? – NevilleS

0

Я наткнулся на исправление. StoreConnection не принимал никаких аргументов, в этом случае connectionArgs, из-за которых реле не распознавало его как соединение.

Исправлена ​​ошибка с добавлением в поле соединений товаров в хранилище.

 Смежные вопросы

  • Нет связанных вопросов^_^