2016-10-16 6 views
1

У меня есть запрос Apollo, который работает правильно в локальном хосте: 3010/graphiql:Apollo Query Работает в GraphIQL, но не в вызове graphql()?

QUERY

query getIMs($fromID: String!, $toID: String!){ 
    instant_message(fromID:$fromID, toID: $toID){ 
    fromID, 
    toID, 
    msgText 
    } 
} 

ЗАПРОСА ПЕРЕМЕННЫЕ

{ 
    "fromID": "1", 
    "toID": "2" 
} 

Вот мой код, чтобы выполнить запрос с помощью обращение к графику():

const GETIMS_QUERY = gql` 
query getIMs($fromID: String!, $toID: String!){ 
    instant_message(fromID:$fromID, toID: $toID){ 
    fromID, 
    toID, 
    msgText 
    } 
} `; 


const CreateIMPageWithDataAndMutations = graphql(GETIMS_QUERY, { 
    options({ toID, userID }) { 
     return { 
      variables: { fromID: `${userID}`, toID: `${toID}`} 
     }; 
    } 
})(CreateIMPageWithMutations); 

Вкладка Chrome сети показывает ожидаемый запрос Payload:

operationName:"getIMs" query: "query getIMs($fromID: String!, $toID: String!) {↵ instant_message(fromID: $fromID, toID: $toID) {↵
fromID↵ toID↵ msgText↵ __typename↵ }↵}↵" variables:{fromID: "DsmkoaYPeAumREsqC", toID: "572bddac4ecbbac0ffe37fdd"} fromID:"DsmkoaYPeAumREsqC" toID:"572bddac4ecbbac0ffe37fdd"

Но data объект возвращается с ApolloError:

"Network error: Unexpected token < in JSON at position 0"

Как я могу это исправить?

Update

Вот снимок экрана вкладки Сеть:

enter image description here

+0

Похоже, вы получаете HTML в качестве ответа с вашего сервера. Убедитесь, что ваш сервер принимает строку JSON ** и ** объект для переменных. graphiql отправляет строку JSON, где Apollo отправляет объект, сервер должен обрабатывать оба сценария. –

+0

Где настройка на сервере Apollo исправить это? – VikR

+0

Если вы используете Apollo Server, он [должен уже] (http://dev.apollodata.com/tools/apollo-server/requests.html) принимает строки и объекты. «Переменные могут быть объектом или строкой, кодированной JSON ». Посмотрите в хром сетевых запросов, каков ответ с сервера? –

ответ

1

С помощью Марк Гринстоку и @neophi, я нашел ответ. У меня была эта настройка вверх Apollo код клиента:

const networkInterface = createNetworkInterface({ 
    uri: '/graphql', 
    opts: { 
     credentials: 'same-origin', 
    }, 
    transportBatching: true, 
}); 

Это определение Ури относительно и используя тот же самый порт (3000), что Метеор работает на. Но сервер GraphQL, конечно, работает на другом порту, 3010 в моем случае. Это исправлено:

const networkInterface = createNetworkInterface({ 
    uri: 'http://localhost:3010/graphql', 
    opts: { 
     credentials: 'same-origin', 
    }, 
    transportBatching: true, 
}); 

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

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