Apollo-link-rest: «TypeError: пересылка не является функцией»

Созданный на 14 нояб. 2018  ·  19Комментарии  ·  Источник: apollographql/apollo-link-rest

Привет,

Я сталкивался с одной и той же ошибкой каждый раз, когда использовал apollo-link-rest: открытие GraphiQL в Apollo devtools всегда показывает ошибку «TypeError: forward is not a function». Полный текст ошибки:

{ "errors": [ { "message": "forward is not a function", "locations": [ "TypeError: forward is not a function\n at RestLink../node_modules/apollo-link-rest/bundle.umd.js.RestLink.request (http://localhost:3000/static/js/bundle.js:5566:24)\n at http://localhost:3000/static/js/bundle.js:5746:33\n at ApolloLink.request (http://localhost:3000/static/js/bundle.js:2602:20)\n at ApolloLink.request (http://localhost:3000/static/js/bundle.js:5745:31)\n at chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:3681\n at e.request (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:38654)\n at chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:3681\n at e.request (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:38421)\n at chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:3681\n at chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:38085\n at new s (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:4855)\n at l.subscribe (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:6185)\n at n.<anonymous> (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:38914)\n at n.t.emit (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:52786)\n at chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:19519\n at n (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/backend.js:1:36148)" ] } ] }

Запросы и изменения с помощью директивы вызывают никаких других ошибок, поэтому это не полностью блокирующая проблема, но она потенциально влияет на некоторые другие возможности клиента Apollo, например, попытка использования директивы @client не работает и выдает ту же ошибку (как и полезная нагрузка ошибки вкомпонент от React-Apollo).

Я клонировал три примера проекта react-apollo (простой, расширенный, машинописный), и во всех трех появляется одна и та же ошибка. # 121 ссылается на эту проблему, но, похоже, исправления нет; исправление, которое включено, предназначено для отдельной ошибки «не удалось получить». Также упоминается отсутствие директивы @rest или @client в качестве потенциальной причины, но, как уже упоминалось, это происходит с

Чтобы воспроизвести, просто клонируйте примеры проектов, установите и запустите и откройте инструменты разработчика Apollo в Chrome (текущая версия, в которой у меня есть эта ошибка, - 70.0.3538.77).

Спасибо, что посмотрели на это, полюбили этот пакет и нашли его невероятно полезным!

bug 🐛 enhancement💡 has-reproduction help wanted 🛠 question❔

Самый полезный комментарий

Привет! Мне удалось немного разобраться, что вызывает эту проблему.
Похоже, что эта операция вызывается apollo-client-devtools.

Однако, когда он попадает сюда , forward не определен.

Я не совсем уверен, как все это работает, иначе я бы сделал пиар, чтобы исправить проблему. Когда я изменил проверку !isRestQuery на !isRestQuery && forward мне удалось отключить указанную выше ошибку. Однако у меня появилась новая ошибка:

Error: Type Query must define one or more fields.
    at t.assertValidSchema (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/devtools.js:1:258433)
    at O (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/devtools.js:1:272246)
    at k (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/devtools.js:1:271277)
    at t.execute (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/devtools.js:1:270565)
    at t.v (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/devtools.js:1:806774)
    at t.n.emit (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/devtools.js:1:394893)
    at chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/devtools.js:1:517657

Вот пример приложения, которое я использовал для обнаружения / отладки этой проблемы: https://github.com/Hilaryous/simple-react-app/tree/apollo-link-rest-example.

Спасибо за всю вашу работу над этой библиотекой. Если я могу чем-то помочь, я буду рад.

Все 19 Комментарий

Я не думаю, что GraphIQL поддерживает apollo-link-state / apollo-link-rest - я не думаю, что они поддерживают ссылки в целом. У вас есть примеры того, как это работает?

Конечно, GraphiQL в инструментах разработки Apollo, похоже, работает. Используя JSONPlaceholder api, RestLink uri установлен на https://jsonplaceholder.typicode.com - вот что я получаю изначально перед выполнением любых запросов:

apollo-devtools-initial

после выполнения запроса, чтобы получить всех пользователей:

apollo-devtools-users

или с "простым" примером проекта:

apollo-devtools-simple

Еще я заметил, что опция «читать из кеша» не работает с новыми записями, созданными с помощью JSONPlaceholder api; мутация POST правильно записывает новую запись в кеш, но последующий запрос пытается выполнить удаленный запрос, даже если выбрано «чтение из кеша». Поскольку новая запись на самом деле не создается, она возвращает null от удаленной конечной точки, как ожидалось, но она создается в кеше, поэтому "чтение из кеша" должно возвращать ее? Это, вероятно, не зависит от apollo-link-rest и выходит за рамки данной проблемы, но все же интересно.

Я получаю ту же ошибку в GraphiQL, forward is not a function . Однако все, кроме cache похоже, работает.

Любые обновления об этих ребятах, у меня была такая же проблема :(

@cstoddart Ваша панель кеширования пуста, верно?

Кто-нибудь знает, как просмотреть кеш без инструментов разработчика?

Я испытываю то же самое. @cgatian да, моя панель кеширования пуста.

Трудно принять инструментальную цепочку Apollo, когда эти поломки происходят так долго. Над apollo-link-rest все еще активно работают?

@heymanhn - Да ApolloLinkRest активно развивается. Но это открытый исходный код. Я рад помочь вам получить PR-тестирование и доставить его, но у меня нет опыта работы с ApolloDevTools.

Нам нужен кто-то, кто это делает или готов погрузиться в свою кодовую базу, чтобы выяснить, что необходимо для обеспечения совместимости с ней. Я призываю вас выяснить, чего не хватает, и я хотел бы поддержать ваш вклад!

Я хочу прояснить, что я не знаю, чтобы apollo-link-rest когда - отсутствие желаемой функции .

Кроме того, я лично использую apollo-link-rest с React-Native, а год назад ApolloDevTools не был совместим с React-Native.

С тех пор они объявили, что исправили это, но я не смог активировать ApolloDevTools для проекта моей команды, поддерживающего реакцию, поэтому я не знаю, что там не так.

Привет! Мне удалось немного разобраться, что вызывает эту проблему.
Похоже, что эта операция вызывается apollo-client-devtools.

Однако, когда он попадает сюда , forward не определен.

Я не совсем уверен, как все это работает, иначе я бы сделал пиар, чтобы исправить проблему. Когда я изменил проверку !isRestQuery на !isRestQuery && forward мне удалось отключить указанную выше ошибку. Однако у меня появилась новая ошибка:

Error: Type Query must define one or more fields.
    at t.assertValidSchema (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/devtools.js:1:258433)
    at O (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/devtools.js:1:272246)
    at k (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/devtools.js:1:271277)
    at t.execute (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/devtools.js:1:270565)
    at t.v (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/devtools.js:1:806774)
    at t.n.emit (chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/devtools.js:1:394893)
    at chrome-extension://jdkknkkbebbapilgoeccciglkfbmbnfm/dist/devtools.js:1:517657

Вот пример приложения, которое я использовал для обнаружения / отладки этой проблемы: https://github.com/Hilaryous/simple-react-app/tree/apollo-link-rest-example.

Спасибо за всю вашу работу над этой библиотекой. Если я могу чем-то помочь, я буду рад.

Я столкнулся с этим недавно и сузил ошибку - это мой случай до IntrospectionQuery, который, как я полагаю, graphiql / devtools запрашивает у сервера graphql схему? Проблема в том, что я использую только apollo-client и apollo-link-rest, поэтому нет сервера или схемы, за исключением схемы кеша (если она есть). В свою очередь, мой apollo devtools пуст. Не совсем уверен, какое здесь будет исправление, все сработало в один момент.

Я столкнулся с этим недавно и сузил ошибку - это мой случай до IntrospectionQuery, который, как я полагаю, graphiql / devtools запрашивает у сервера graphql схему? Проблема в том, что я использую только apollo-client и apollo-link-rest, поэтому нет сервера или схемы, за исключением схемы кеша (если она есть). В свою очередь, мой apollo devtools пуст. Не совсем уверен, какое здесь будет исправление, все сработало в один момент.

То же самое

Мы видели ApolloDevTools, работающие с apollo-link-state, apollo-link-Rest в React Native Debugger, совсем недавно, в прошлый четверг. Мы уверены, что это все еще актуальная проблема? Какие у вас версии на @ edgars-sirokovs?

Мы видели ApolloDevTools, работающие с apollo-link-state, apollo-link-Rest в React Native Debugger, совсем недавно, в прошлый четверг. Мы уверены, что это все еще актуальная проблема? Какие у вас версии на @ edgars-sirokovs?

@fbartho 2.2.4

@fbartho только что проверил еще раз - теперь вроде как работает. По крайней мере, больше не пусто.
Однако у меня все еще есть проблемы - я не могу прокручивать представление кеша, а проводник документации не показывает схему (у меня есть только схема на стороне клиента, переданная через typeDefs ).

Я не знаю, что нужно проводнику документации для поддержки apollo-link-rest, но меня не удивит, если есть над чем поработать, и / или он никогда не будет работать хорошо. Принятие PR, если здесь нужна работа!

Прокрутка просмотра кеша определенно кажется ошибкой в ​​коде ApolloDevTools,

Но я рад, что ты добился прогресса, @ edgars-sirokovs!

Мы видели ApolloDevTools, работающие с apollo-link-state, apollo-link-Rest в React Native Debugger, совсем недавно, в прошлый четверг. Мы уверены, что это все еще актуальная проблема? Какие у вас версии на @ edgars-sirokovs?

Я тестирую его с помощью проекта simple и он не работает, вкладка Apollo DevTools доступна, но всегда пуста, и я получаю следующую ошибку. https://github.com/apollographql/apollo-link-rest/tree/master/examples/simple

@fbartho Я сделал то же самое с проектом, над которым я работаю,

Сегодня мы узнали, что это работает - но не вкладка GraphiQL, а только другие вкладки: https://github.com/apollographql/apollo-client-devtools/issues/227

Из-за того, что похоже на ту же проблему, я не могу прочитать локальную схему Docs в Devtools GraphiQL.

Выполнение этого запроса самоанализа отображает [object Object] на панели ответов, а консоль сообщает [Network error]: TypeError: forward is not a function

{
  __schema {
    types {
      name
    }
  }
}

У моего клиента нет сервера graphql:

import { ApolloClient } from 'apollo-client';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { persistCache } from 'apollo-cache-persist';
import localForage from 'localforage';
import typeDefs from './schema.graphql';
import { resolvers } from './resolvers';
import { link } from './link';
import { initialState } from './initialState';
export let client;
export async function createApolloClient() {
  const cache = new InMemoryCache();
  await persistCache({ cache, storage: localForage, serialize: false });
  client = new ApolloClient({ cache, link, resolvers, typeDefs });
  window.__APOLLO_CLIENT__ = client;
  cache.writeData({ data: initialState });
  return client;
}

См. Https://spectrum.chat/apollo/apollo-link-state/client-has-typedefs-but-no-docs-in-graphiql~8a80e439-3257-4fce-a666-a1e75c3cec63

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

Недавно я столкнулся с этой ошибкой, когда пытался добавить apollo-link-rest в существующее приложение, используя @apollo/client .

tl; dr Проблема оказалась в том, что вы не можете передать одновременно uri и link качестве параметров опции при определении нового ApolloCient . Вместо этого вы должны удалить параметр uri и создать HttpLink используя createHttpLink а затем использовать from() чтобы объединить ваши ссылки и их в link параметр

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

import { ApolloClient, InMemoryCache } from '@apollo/client';

const client = new ApolloClient({
  uri: '/api/graphql',
  cache: new InMemoryCache(),
});

При чтении документации у меня создалось впечатление, что я смогу добавить ссылку для отдыха, определив новый RestLink и добавив дополнительный параметр link к моим параметрам, например:

import { ApolloClient, InMemoryCache } from '@apollo/client';
import { RestLink } from 'apollo-link-rest';

const restLink = new RestLink({
  uri: '/api',
});

const client = new ApolloClient({
  uri: '/api/graphql',
  cache: new InMemoryCache(),
  link: restLink,
});

Однако эта конфигурация вызвала ошибку TypeError: forward is not a function и клиент больше не работал.

Прочитав документацию по ссылкам, я понял (хотя я не видел, чтобы это было явно сказано, и могут быть случаи, когда это неверно), что вы не можете использовать uri и link option параметры в определении ApolloClient одновременно. Используя эту новую информацию, я смог решить проблему, удалив параметр uri и создав HttpLink который я затем объединил с помощью RestLink используя from() и все, наконец, сработало (обратите внимание, что согласно документации , RestLink должно стоять перед HttpLink ):

import {
  ApolloClient, InMemoryCache, from, createHttpLink,
} from '@apollo/client';
import { RestLink } from 'apollo-link-rest';
const httpLink = createHttpLink({
  uri: '/api/graphql',
});

const restLink = new RestLink({
  uri: '/api',
});

const client = new ApolloClient({
  cache: new InMemoryCache(),
  link: from([restLink, httpLink]),
});

спасибо @crbanman, ты спас мне день! 💯

Была ли эта страница полезной?
0 / 5 - 0 рейтинги