Hiya,
Tenho encontrado o mesmo erro toda vez que usei apollo-link-rest: abrir o GraphiQL nas ferramentas de desenvolvimento do Apollo sempre mostra um erro "TypeError: encaminhar não é uma função". O texto completo do erro:
{
"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)"
]
}
]
}
Consultas e mutações com a diretiva @rest parecem estar funcionando bem e não @client não funciona e lança o mesmo erro (como a carga útil do erro em um
Clonei os três projetos de exemplo react-apollo (simples, avançado, datilografado) e o mesmo erro apareceu em todos os três. # 121 faz referência a esse problema, mas não parece haver uma solução; a correção incluída é para um bug separado "falha ao buscar". Há também uma menção de uma directiva faltando @rest ou @client como uma causa potencial, mas como mencionado isso está acontecendo com os projetos de amostra, bem como o meu próprio, então eu não acho que uma directiva que falta é o culpado.
Para reproduzir, basta clonar os projetos de exemplo, instalar, iniciar e abrir as ferramentas de desenvolvimento do Apollo no Chrome (a versão atual em que estou tendo este erro é 70.0.3538.77).
Obrigado por olhar para isso, adorei o pacote e ache-o incrivelmente útil!
Eu não acho que GraphIQL suporte apollo-link-state / apollo-link-rest - eu não acho que eles suportam links em geral. Você tem exemplos disso funcionando?
Claro, o GraphiQL nas ferramentas de desenvolvimento do Apollo parece funcionar. Usando a API JSONPlaceholder , RestLink uri definido como https://jsonplaceholder.typicode.com - aqui está o que recebo inicialmente antes de qualquer consulta ser executada:
depois de executar a consulta para obter todos os usuários:
ou com o projeto de exemplo "simples":
Outra coisa que notei é que a opção "ler do cache" não funciona com novas entradas criadas com a API JSONPlaceholder; uma mutação POST grava uma nova entrada no cache de maneira adequada, mas uma consulta subsequente tenta consultar remotamente, mesmo com "ler do cache" selecionado. Como a nova entrada não foi realmente criada, ele retorna nulo do ponto de extremidade remoto conforme o esperado, mas é criado no cache, portanto, "ler do cache" deve retorná-lo? Isso provavelmente é agnóstico para apollo-link-rest e está fora do escopo desta edição, mas ainda é interessante.
Estou recebendo o mesmo erro no GraphiQL, forward is not a function
. Porém, tudo além de cache
parece estar funcionando.
Quaisquer atualizações sobre esse pessoal, eu tive o mesmo problema :(
@cstoddart Seu painel de cache está vazio, correto?
Alguém sabe como visualizar o cache sem os devtools?
Estou experimentando a mesma coisa. @cgatian sim, meu painel de cache está vazio.
É difícil aceitar a cadeia de ferramentas de Apollo quando essas quebras ocorrem por tanto tempo. O apollo-link-rest ainda está sendo trabalhado ativamente?
@heymanhn - Sim, o ApolloLinkRest está sendo desenvolvido ativamente. Mas isso é código aberto. Fico feliz em ajudá-lo a testar e entregar um PR, mas não tenho experiência com ApolloDevTools.
Precisamos de alguém que faça ou esteja disposto a mergulhar em sua base de código para descobrir o que é necessário para ser compatível com ela. Eu desafio você a descobrir o que está faltando e eu adoraria apoiar suas contribuições!
Quero deixar claro que não sei se apollo-link-rest já funcionou com ApolloDevTools, então eu diria que isso é menos uma falha e mais um recurso desejado ausente .
Além disso, eu pessoalmente uso apollo-link-rest com React-Native, e há um ano atrás, ApolloDevTools não era compatível com React-Native.
Desde então, eles anunciaram que consertaram isso, mas não consegui ativar o ApolloDevTools para o projeto de reação nativa da minha equipe, então não sei o que há de errado aí.
Oi! Consegui descobrir um pouco o que está causando esse problema.
Parece que essa operação foi chamada pelo apollo-client-devtools.
Quando chega aqui , entretanto, forward
é indefinido.
Não tenho certeza de como tudo isso funciona, caso contrário, faria um PR para corrigir o problema. Quando mudei o cheque !isRestQuery
para !isRestQuery && forward
fui capaz de silenciar o erro acima. No entanto, recebi um novo erro:
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
Aqui está um aplicativo de exemplo que usei para ver / depurar esse problema: https://github.com/Hilaryous/simple-react-app/tree/apollo-link-rest-example.
Obrigado por todo o seu trabalho nesta biblioteca. Se eu puder ajudar de alguma forma, fico feliz em fazê-lo.
Estou me deparando com isso recentemente e reduzi o erro. É o meu caso para o IntrospectionQuery, que acredito que o Graphiql / devtools está consultando o servidor Graphql para o esquema? O problema é que estou usando apenas apollo-client e apollo-link-rest, então não há um servidor ou esquema, exceto para o esquema de cache (se houver). Por sua vez, meus devtools apollo estão em branco. Não tenho certeza de qual seria a correção aqui, tudo funcionou em um ponto.
Estou me deparando com isso recentemente e reduzi o erro. É o meu caso para o IntrospectionQuery, que acredito que o Graphiql / devtools está consultando o servidor Graphql para o esquema? O problema é que estou usando apenas apollo-client e apollo-link-rest, então não há um servidor ou esquema, exceto para o esquema de cache (se houver). Por sua vez, meus devtools apollo estão em branco. Não tenho certeza de qual seria a correção aqui, tudo funcionou em um ponto.
Mesmo aqui
Vimos ApolloDevTools trabalhando com apollo-link-state, apollo-link-Rest no React Native Debugger, recentemente na última quinta-feira. Temos certeza de que este ainda é um problema ativo? Em quais versões você está @edgars-sirokovs?
Vimos ApolloDevTools trabalhando com apollo-link-state, apollo-link-Rest no React Native Debugger, recentemente na última quinta-feira. Temos certeza de que este ainda é um problema ativo? Em quais versões você está @edgars-sirokovs?
@fbartho 2.2.4
@fbartho acabou de verificar novamente - está meio que funcionando agora. Pelo menos não está mais em branco.
Ainda tenho problemas - não ser capaz de rolar a visualização do cache e o Explorador de documentação não está mostrando o esquema (tenho apenas o esquema do lado do cliente transmitido por meio de typeDefs
).
Eu não sei o que o explorador de documentação precisa para suportar o apollo-link-rest, mas não me surpreenderia se houver trabalho a fazer e / ou se nunca funcionará bem. Aceitando PRs se o trabalho for necessário aqui!
Rolar a visualização do cache definitivamente parece um bug no código do ApolloDevTools,
Mas estou feliz que você tenha feito progressos @edgars-sirokovs!
Vimos ApolloDevTools trabalhando com apollo-link-state, apollo-link-Rest no React Native Debugger, recentemente na última quinta-feira. Temos certeza de que este ainda é um problema ativo? Em quais versões você está @edgars-sirokovs?
Eu o testo com o projeto simple
e não funciona, a guia Apollo DevTools está disponível, mas está sempre em branco e estou recebendo o próximo erro. https://github.com/apollographql/apollo-link-rest/tree/master/examples/simple
@fbartho Fiz o mesmo com o projeto em que estou trabalhando no react native com react-native-debugger e tive o mesmo problema. Você poderia compartilhar sua configuração ou quais versões você estava usando?
Aprendemos hoje que funciona - mas não a guia GraphiQL, apenas as outras guias: https://github.com/apollographql/apollo-client-devtools/issues/227
Devido ao que parece ser o mesmo problema, não consigo ler o esquema local Docs
no Devtools GraphiQL.
A execução desta consulta de introspecção exibe [object Object]
no painel de resposta e os relatórios do console [Network error]: TypeError: forward is not a function
{
__schema {
types {
name
}
}
}
Meu cliente não tem servidor 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;
}
Não tenho certeza se isso está exatamente relacionado ao caso de uso como todos acima, mas este é o único resultado de pesquisa relevante que consegui encontrar com o erro que estava recebendo e que eventualmente resolvi.
Recentemente, encontrei este erro quando estava tentando adicionar apollo-link-rest
a um aplicativo existente usando @apollo/client
.
tl; dr O problema acabou sendo que você não pode passar uri
e link
como parâmetros de opção ao definir um novo ApolloCient
. Em vez disso, você deve remover o parâmetro uri
e criar um HttpLink
usando createHttpLink
e, em seguida, usar from()
para combinar seus links e eles ao link
parâmetro de opção.
Antes de adicionar o link restante, esta é a aparência da minha definição:
import { ApolloClient, InMemoryCache } from '@apollo/client';
const client = new ApolloClient({
uri: '/api/graphql',
cache: new InMemoryCache(),
});
Ao ler a documentação, fiquei com a impressão de que deveria ser capaz de adicionar um link de descanso definindo um novo RestLink
e adicionando o parâmetro link
às minhas opções como este:
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,
});
No entanto, essa configuração fez com que o erro TypeError: forward is not a function
ocorresse e o cliente não funcionasse mais.
Depois de ler mais na documentação sobre links, percebi (embora não pudesse ver explicitamente dito, e pode haver casos em que isso esteja incorreto) que você não pode usar uri
e link
parâmetros de opção na definição ApolloClient
ao mesmo tempo. Usando essa nova informação, consegui corrigir o problema removendo o parâmetro uri
e criando um HttpLink
que combinei com RestLink
usando from()
e tudo finalmente funcionou (observe que, de acordo com a documentação , RestLink
deve ir antes de 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]),
});
obrigado @crbanman você salvou meu dia! 💯
Comentários muito úteis
Oi! Consegui descobrir um pouco o que está causando esse problema.
Parece que essa operação foi chamada pelo apollo-client-devtools.
Quando chega aqui , entretanto,
forward
é indefinido.Não tenho certeza de como tudo isso funciona, caso contrário, faria um PR para corrigir o problema. Quando mudei o cheque
!isRestQuery
para!isRestQuery && forward
fui capaz de silenciar o erro acima. No entanto, recebi um novo erro:Aqui está um aplicativo de exemplo que usei para ver / depurar esse problema: https://github.com/Hilaryous/simple-react-app/tree/apollo-link-rest-example.
Obrigado por todo o seu trabalho nesta biblioteca. Se eu puder ajudar de alguma forma, fico feliz em fazê-lo.