Apollo-link-rest: "TypeError: forward ist keine Funktion"

Erstellt am 14. Nov. 2018  ·  19Kommentare  ·  Quelle: apollographql/apollo-link-rest

Hiya,

Ich habe jedes Mal den gleichen Fehler festgestellt, wenn ich Apollo-Link-Rest verwendet habe: Beim Öffnen von GraphiQL in den Apollo-Devtools wird immer der Fehler "TypeError: Forward ist keine Funktion" angezeigt. Der vollständige Text des Fehlers:

{ "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)" ] } ] }

Abfragen und Mutationen mit der @ rest- Direktive scheinen Daher ist dies kein vollständig blockierendes Problem, wirkt sich jedoch möglicherweise auf einige andere Apollo Client-Funktionen aus, z. B. funktioniert der Versuch, die @ client- Direktive zu verwenden, nicht und löst den gleichen Fehler aus (wie die Fehlernutzlast in aKomponente von React-Apollo).

Ich habe die drei Beispiel-React-Apollo-Projekte (einfach, fortgeschritten, Typoskript) geklont und in allen drei Fällen tritt der gleiche Fehler auf. # 121 verweist auf dieses Problem, aber es scheint keine Lösung zu geben. Das mitgelieferte Update bezieht sich auf einen separaten Fehler "Fehler beim Abrufen". Es wird auch eine fehlende @ rest- oder @ client- Direktive als mögliche Ursache erwähnt, aber wie bereits erwähnt, geschieht dies sowohl bei den Beispielprojekten als auch bei meinen eigenen, sodass ich nicht denke, dass eine fehlende Direktive der Schuldige ist.

Um zu reproduzieren, klonen Sie einfach die Beispielprojekte, installieren und starten Sie die Apollo-Entwicklungstools in Chrome (die aktuelle Version, in der dieser Fehler auftritt, ist 70.0.3538.77).

Vielen Dank, dass Sie sich das angeschaut haben, das Paket lieben und es unglaublich nützlich finden!

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

Hilfreichster Kommentar

Hallo! Ich konnte ein wenig untersuchen, was dieses Problem verursacht.
Es sieht so aus, als würde diese Operation von den Apollo-Client-Devtools aufgerufen.

Wenn es jedoch hier ankommt, ist forward undefiniert.

Ich bin mir nicht ganz sicher, wie das alles funktioniert, sonst würde ich eine PR machen, um das Problem zu beheben. Als ich den Scheck !isRestQuery in !isRestQuery && forward geändert habe, konnte ich den obigen Fehler zum Schweigen bringen. Ich habe jedoch einen neuen Fehler erhalten:

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

Hier ist eine Beispiel-App, mit der ich dieses Problem gesehen / debuggt habe: https://github.com/Hilaryous/simple-react-app/tree/apollo-link-rest-example.

Vielen Dank für all Ihre Arbeit an dieser Bibliothek. Wenn ich irgendwie helfen kann, bin ich froh, dies zu tun.

Alle 19 Kommentare

Ich glaube nicht, dass GraphIQL Apollo-Link-State / Apollo-Link-Rest unterstützt - ich glaube nicht, dass sie Links im Allgemeinen unterstützen. Haben Sie Beispiele dafür?

Sicher, GraphiQL in Apollo Dev Tools scheint zu funktionieren. Mit der JSONPlaceholder- API hat RestLink uri auf https://jsonplaceholder.typicode.com gesetzt. Folgendes erhalte ich zunächst, bevor Abfragen ausgeführt werden:

apollo-devtools-initial

Nach dem Ausführen der Abfrage, um alle Benutzer zu erhalten:

apollo-devtools-users

oder mit dem "einfachen" Beispielprojekt:

apollo-devtools-simple

Etwas anderes ist mir aufgefallen, dass die Option "Aus Cache lesen" nicht mit neuen Einträgen funktioniert, die mit der JSONPlaceholder-API erstellt wurden. Eine POST-Mutation schreibt einen neuen Eintrag ordnungsgemäß in den Cache. Bei einer nachfolgenden Abfrage wird jedoch versucht, eine Remote-Abfrage durchzuführen, auch wenn "Aus Cache lesen" ausgewählt ist. Da der neue Eintrag nicht tatsächlich erstellt wird, wird vom Remote-Endpunkt erwartungsgemäß null zurückgegeben, er wird jedoch im Cache erstellt. Sollte "Aus Cache lesen" ihn also zurückgeben? Dies ist wahrscheinlich unabhängig von Apollo-Link-Rest und außerhalb des Rahmens dieser Ausgabe, aber immer noch interessant.

Ich erhalte den gleichen Fehler in GraphiQL, forward is not a function . Alles außer cache scheint jedoch zu funktionieren.

Irgendwelche Updates zu diesen Jungs, ich hatte das gleiche Problem :(

@cstoddart Dein Cache-Bereich ist leer, richtig?

Weiß jemand, wie man den Cache ohne die devtools anzeigt?

Ich erlebe das Gleiche. @cgatian ja, mein Cache-Panel ist leer.

Es ist schwer, die Werkzeugkette von Apollo zu akzeptieren, wenn diese Brüche so lange auftreten. Wird noch aktiv an Apollo-Link-Rest gearbeitet?

@heymanhn - Ja ApolloLinkRest wird aktiv entwickelt. Aber das ist Open Source. Ich helfe Ihnen gerne dabei, eine PR zu testen und zu liefern, habe aber keine Erfahrung mit ApolloDevTools.

Wir brauchen jemanden, der dies tut oder bereit ist, in seine Codebasis einzutauchen, um herauszufinden, was notwendig ist, um damit kompatibel zu sein. Ich fordere Sie auf, herauszufinden, was fehlt, und ich würde gerne Ihre Beiträge unterstützen!

Ich möchte klarstellen, dass ich nicht weiß, dass Apollo-Link-Rest jemals mit ApolloDevTools funktioniert hat, daher würde ich sagen, dass dies weniger ein Bruch als vielmehr eine fehlende gewünschte Funktion ist .

Außerdem verwende ich persönlich Apollo-Link-Rest mit React-Native, und vor einem Jahr war ApolloDevTools nicht mit React-Native kompatibel.

Sie haben inzwischen angekündigt, dass sie das behoben haben, aber ich konnte ApolloDevTools für das reaktionsnative Projekt meines Teams nicht aktivieren, sodass ich nicht weiß, was dort falsch ist.

Hallo! Ich konnte ein wenig untersuchen, was dieses Problem verursacht.
Es sieht so aus, als würde diese Operation von den Apollo-Client-Devtools aufgerufen.

Wenn es jedoch hier ankommt, ist forward undefiniert.

Ich bin mir nicht ganz sicher, wie das alles funktioniert, sonst würde ich eine PR machen, um das Problem zu beheben. Als ich den Scheck !isRestQuery in !isRestQuery && forward geändert habe, konnte ich den obigen Fehler zum Schweigen bringen. Ich habe jedoch einen neuen Fehler erhalten:

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

Hier ist eine Beispiel-App, mit der ich dieses Problem gesehen / debuggt habe: https://github.com/Hilaryous/simple-react-app/tree/apollo-link-rest-example.

Vielen Dank für all Ihre Arbeit an dieser Bibliothek. Wenn ich irgendwie helfen kann, bin ich froh, dies zu tun.

Ich bin kürzlich darauf gestoßen und habe den Fehler auf die IntrospectionQuery eingegrenzt. Ich glaube, dass graphiql / devtools den graphql-Server nach dem Schema abfragt. Das Problem ist, dass ich nur Apollo-Client und Apollo-Link-Rest verwende, sodass es außer dem Cache-Schema (falls vorhanden) keinen Server oder kein Schema gibt. Im Gegenzug sind meine Apollo Devtools leer. Ich bin mir nicht ganz sicher, wie das Problem hier behoben werden soll. Alles hat an einem Punkt funktioniert.

Ich bin kürzlich darauf gestoßen und habe den Fehler auf die IntrospectionQuery eingegrenzt. Ich glaube, dass graphiql / devtools den graphql-Server nach dem Schema abfragt. Das Problem ist, dass ich nur Apollo-Client und Apollo-Link-Rest verwende, sodass es außer dem Cache-Schema (falls vorhanden) keinen Server oder kein Schema gibt. Im Gegenzug sind meine Apollo Devtools leer. Ich bin mir nicht ganz sicher, wie das Problem hier behoben werden soll. Alles hat an einem Punkt funktioniert.

Hier gilt das gleiche

Wir haben ApolloDevTools erst letzten Donnerstag im React Native Debugger mit Apollo-Link-Status und Apollo-Link-Rest arbeiten sehen. Sind wir sicher, dass dies immer noch ein aktives Problem ist? Welche Versionen haben Sie auf @ edgars-sirokovs?

Wir haben ApolloDevTools erst letzten Donnerstag im React Native Debugger mit Apollo-Link-Status und Apollo-Link-Rest arbeiten sehen. Sind wir sicher, dass dies immer noch ein aktives Problem ist? Welche Versionen haben Sie auf @ edgars-sirokovs?

@fbartho 2.2.4

@fbartho hat es gerade noch einmal überprüft - es funktioniert jetzt irgendwie. Zumindest nicht mehr leer.
Ich habe jedoch immer noch Probleme - die Cache-Ansicht kann nicht gescrollt werden, und der Dokumentations-Explorer zeigt kein Schema an (ich habe nur clientseitiges Schema über typeDefs ).

Ich weiß nicht, was der Dokumentations-Explorer für die Unterstützung von Apollo-Link-Rest benötigt, aber es würde mich nicht wundern, wenn noch etwas zu tun ist und / oder es wird nie gut funktionieren. Akzeptieren Sie PRs, wenn hier Arbeit benötigt wird!

Das Scrollen in der Cache-Ansicht scheint definitiv ein Fehler im ApolloDevTools-Code zu sein.

Aber ich bin froh, dass Sie Fortschritte gemacht haben @ edgars-sirokovs!

Wir haben ApolloDevTools erst letzten Donnerstag im React Native Debugger mit Apollo-Link-Status und Apollo-Link-Rest arbeiten sehen. Sind wir sicher, dass dies immer noch ein aktives Problem ist? Welche Versionen haben Sie auf @ edgars-sirokovs?

Ich teste es mit dem simple -Projekt und es funktioniert nicht. Die Registerkarte Apollo DevTools ist verfügbar, aber sie ist immer leer und ich erhalte den nächsten Fehler. https://github.com/apollographql/apollo-link-rest/tree/master/examples/simple

@fbartho Ich habe das gleiche mit dem Projekt gemacht, in dem ich in

Wir haben heute erfahren, dass es funktioniert - aber nicht die Registerkarte GraphiQL, sondern nur die anderen Registerkarten: https://github.com/apollographql/apollo-client-devtools/issues/227

Aufgrund des gleichen Problems kann ich das lokale Schema Docs in devtools GraphiQL nicht lesen.

Wenn Sie diese Introspektionsabfrage ausführen, wird im Antwortbereich [object Object] angezeigt, und die Konsole meldet [Network error]: TypeError: forward is not a function

{
  __schema {
    types {
      name
    }
  }
}

Mein Client hat keinen Graphql-Server:

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;
}

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

Ich bin mir nicht sicher, ob dies genau mit dem Anwendungsfall wie bei allen oben genannten zusammenhängt, aber dies ist das einzige relevante Suchergebnis, das ich mit dem Fehler finden konnte, den ich schließlich gelöst habe.

Ich bin kürzlich auf diesen Fehler gestoßen, als ich versucht habe, apollo-link-rest mit @apollo/client zu einer vorhandenen Anwendung hinzuzufügen.

tl; dr Das Problem stellte sich heraus, dass Sie nicht beide passieren kann uri und link als Option Parameter , wenn eine neue Definition von ApolloCient . Stattdessen müssen Sie den Parameter uri entfernen und mit createHttpLink ein HttpLink erstellen und dann mit from() Ihre Links und diese mit den link kombinieren

Bevor ich den Rest-Link hinzufügte, sah meine Definition folgendermaßen aus:

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

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

Beim Lesen der Dokumentation hatte ich den Eindruck, dass ich in der Lage sein sollte, einen Restlink hinzuzufügen, indem ich einen neuen RestLink und meinen Optionen wie folgt den zusätzlichen Parameter link hinzufüge:

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,
});

Diese Konfiguration führte jedoch dazu, dass der Fehler TypeError: forward is not a function auftrat und der Client nicht mehr funktionierte.

Nachdem ich weiter in der Dokumentation zu Links gelesen hatte, stellte ich fest (obwohl ich es nicht explizit sehen konnte und es kann Fälle geben, in denen dies falsch ist), dass Sie die uri und link Optionsparameter in der ApolloClient Definition gleichzeitig. Mit diesen neuen Informationen konnte ich das Problem beheben, indem ich den Parameter uri und ein HttpLink , das ich dann mit RestLink mit from() und kombinierte Alles hat endlich funktioniert (beachten Sie, dass gemäß der Dokumentation die RestLink vor den 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]),
});

danke @crbanman du hast meinen Tag gerettet! 💯

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

timhwang21 picture timhwang21  ·  7Kommentare

fkolar picture fkolar  ·  5Kommentare

kevinrobayna picture kevinrobayna  ·  6Kommentare

sinisterra picture sinisterra  ·  6Kommentare

dphaener picture dphaener  ·  5Kommentare