Apollo-link-rest: "TypeError: maju bukan fungsi"

Dibuat pada 14 Nov 2018  ·  19Komentar  ·  Sumber: apollographql/apollo-link-rest

Hai,

Saya telah menemukan kesalahan yang sama setiap kali saya menggunakan apollo-link-rest: membuka GraphiQL di devtools Apollo selalu menunjukkan kesalahan "TypeError: forward is not a function". Teks lengkap dari kesalahan tersebut:

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

Kueri dan mutasi dengan direktif @rest tampaknya berfungsi dengan baik dan tidak menimbulkan kesalahan lain, jadi ini bukan masalah pemblokiran sepenuhnya, tetapi berpotensi memengaruhi beberapa kemampuan Klien Apollo lainnya, misalnya mencoba menggunakan direktif @client tidak berfungsi dan menampilkan error yang sama (seperti error payload di filekomponen dari react-apollo).

Saya mengkloning tiga contoh proyek react-apollo (sederhana, lanjutan, skrip) dan kesalahan yang sama muncul di ketiganya. # 121 merujuk masalah ini tetapi tampaknya tidak ada perbaikan; perbaikan yang disertakan adalah untuk bug "gagal diambil" yang terpisah. Ada juga yang menyebutkan arahan @rest atau @client yang hilang sebagai penyebab potensial, tetapi seperti yang disebutkan, ini terjadi dengan proyek sampel dan juga proyek saya sendiri, jadi saya rasa direktif yang hilang bukanlah penyebabnya.

Untuk mereproduksi, cukup klon proyek contoh, instal dan mulai dan buka alat dev Apollo di Chrome (versi saat ini saya mengalami kesalahan ini adalah 70.0.3538.77).

Terima kasih telah melihat ini, suka paketnya dan merasa sangat berguna!

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

Komentar yang paling membantu

Hai! Saya dapat melihat sedikit tentang apa yang menyebabkan masalah ini.
Sepertinya operasi ini dipanggil oleh apollo-client-devtools.

Namun ketika sampai di sini , forward tidak ditentukan.

Saya tidak sepenuhnya yakin bagaimana ini semua bekerja jika tidak, saya akan membuat PR untuk memperbaiki masalah tersebut. Ketika saya mengubah cek !isRestQuery menjadi !isRestQuery && forward saya dapat membungkam kesalahan di atas. Namun, saya mendapat kesalahan baru:

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

Berikut adalah contoh aplikasi yang saya gunakan untuk melihat / men-debug masalah ini: https://github.com/Hilaryous/simple-react-app/tree/apollo-link-rest-example.

Terima kasih atas semua pekerjaan Anda di perpustakaan ini. Jika saya dapat membantu dengan cara apa pun, saya senang melakukannya.

Semua 19 komentar

Saya tidak berpikir GraphIQL mendukung apollo-link-state / apollo-link-rest - Saya rasa mereka tidak mendukung tautan secara umum. Apakah Anda memiliki contoh yang berhasil?

Tentu, GraphiQL di alat dev Apollo tampaknya berfungsi. Menggunakan api JSONPlaceholder , RestLink uri diatur ke https://jsonplaceholder.typicode.com - inilah yang saya dapatkan pada awalnya sebelum kueri apa pun dijalankan:

apollo-devtools-initial

setelah menjalankan kueri untuk mendapatkan semua pengguna:

apollo-devtools-users

atau dengan proyek contoh "sederhana":

apollo-devtools-simple

Hal lain yang saya perhatikan adalah bahwa opsi "baca dari cache" tidak berfungsi dengan entri baru yang dibuat dengan api JSONPlaceholder; mutasi POST menulis entri baru ke cache dengan benar, tetapi kueri berikutnya mencoba untuk melakukan kueri dari jarak jauh bahkan dengan memilih "baca dari cache". Karena entri baru sebenarnya tidak dibuat, ini mengembalikan null dari titik akhir jarak jauh seperti yang diharapkan, tetapi dibuat dalam cache, jadi "baca dari cache" harus mengembalikannya? Ini mungkin agnostik untuk apollo-link-rest, dan di luar cakupan masalah ini, tapi masih menarik.

Saya mendapatkan kesalahan yang sama di GraphiQL, forward is not a function . Segala sesuatu selain cache tampaknya berfungsi.

Setiap pembaruan pada orang ini, saya memiliki masalah yang sama :(

@cstoddart Panel cache Anda kosong, benar?

Adakah yang tahu cara melihat cache tanpa devtools?

Saya mengalami hal yang sama. @cgatian ya, panel cache saya kosong.

Sulit untuk merangkul toolchain apollo jika kerusakan ini terjadi begitu lama. Apakah apollo-link-rest masih dikerjakan secara aktif?

@heymanhn - Ya ApolloLinkRest sedang dikembangkan secara aktif. Tapi ini open source. Saya senang membantu Anda mendapatkan PR yang diuji & dikirim, tetapi saya tidak memiliki pengalaman dengan ApolloDevTools.

Kami membutuhkan seseorang yang melakukannya, atau bersedia untuk menyelami basis kode mereka untuk mencari tahu apa yang diperlukan agar kompatibel dengannya. Saya menantang Anda untuk mencari tahu apa yang hilang dan saya ingin mendukung kontribusi Anda!

Saya ingin menjelaskan, bahwa saya tidak tahu apollo-link-rest pernah bekerja dengan ApolloDevTools, jadi menurut saya ini bukan kerusakan, dan lebih banyak fitur yang diinginkan yang hilang .

Selain itu, saya pribadi menggunakan apollo-link-rest dengan React-Native, dan kembali setahun yang lalu, ApolloDevTools tidak kompatibel dengan React-Native.

Sejak itu mereka mengumumkan bahwa mereka memperbaikinya, tetapi saya belum dapat mengaktifkan ApolloDevTools untuk proyek react-native tim saya, jadi saya tidak tahu apa yang salah di sana.

Hai! Saya dapat melihat sedikit tentang apa yang menyebabkan masalah ini.
Sepertinya operasi ini dipanggil oleh apollo-client-devtools.

Namun ketika sampai di sini , forward tidak ditentukan.

Saya tidak sepenuhnya yakin bagaimana ini semua bekerja jika tidak, saya akan membuat PR untuk memperbaiki masalah tersebut. Ketika saya mengubah cek !isRestQuery menjadi !isRestQuery && forward saya dapat membungkam kesalahan di atas. Namun, saya mendapat kesalahan baru:

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

Berikut adalah contoh aplikasi yang saya gunakan untuk melihat / men-debug masalah ini: https://github.com/Hilaryous/simple-react-app/tree/apollo-link-rest-example.

Terima kasih atas semua pekerjaan Anda di perpustakaan ini. Jika saya dapat membantu dengan cara apa pun, saya senang melakukannya.

Saya mengalami ini baru-baru ini dan telah mempersempit kesalahan kasus saya ke IntrospectionQuery, yang menurut saya graphiql / devtools menanyakan server graphql untuk skema? Masalahnya, saya hanya menggunakan apollo-client dan apollo-link-rest, jadi tidak ada server atau skema, kecuali untuk skema cache (jika ada). Pada gilirannya, alat bantu apollo saya kosong. Tidak yakin apa perbaikannya di sini, semuanya bekerja pada satu titik.

Saya mengalami ini baru-baru ini dan telah mempersempit kesalahan kasus saya ke IntrospectionQuery, yang menurut saya graphiql / devtools menanyakan server graphql untuk skema? Masalahnya, saya hanya menggunakan apollo-client dan apollo-link-rest, jadi tidak ada server atau skema, kecuali untuk skema cache (jika ada). Pada gilirannya, alat bantu apollo saya kosong. Tidak yakin apa perbaikannya di sini, semuanya bekerja pada satu titik.

Sama disini

Kami melihat ApolloDevTools bekerja dengan apollo-link-state, apollo-link-Rest di React Native Debugger, paling lambat Kamis lalu. Apakah kami yakin ini masih masalah aktif? Versi apa Anda di @ edgars-sirokovs?

Kami melihat ApolloDevTools bekerja dengan apollo-link-state, apollo-link-Rest di React Native Debugger, paling lambat Kamis lalu. Apakah kami yakin ini masih masalah aktif? Versi apa Anda di @ edgars-sirokovs?

@bayu_joo 2.2.4

@fbartho baru saja memeriksa lagi - ini agak berfungsi sekarang. Setidaknya tidak kosong lagi.
Saya masih memiliki masalah - tidak dapat menggulir tampilan cache dan Penjelajah dokumentasi tidak menampilkan skema (saya hanya memiliki skema sisi klien yang diteruskan melalui typeDefs ).

Saya tidak tahu apa yang dibutuhkan penjelajah dokumentasi untuk mendukung apollo-link-rest tetapi tidak akan mengejutkan saya jika ada pekerjaan yang harus dilakukan, dan / atau tidak akan pernah berfungsi dengan baik. Menerima PR jika pekerjaan dibutuhkan di sini!

Menggulir tampilan cache pasti tampak seperti bug dalam kode ApolloDevTools,

Tapi saya senang Anda telah membuat kemajuan @ edgars-sirokovs!

Kami melihat ApolloDevTools bekerja dengan apollo-link-state, apollo-link-Rest di React Native Debugger, paling lambat Kamis lalu. Apakah kami yakin ini masih masalah aktif? Versi apa Anda di @ edgars-sirokovs?

Saya mengujinya dengan proyek simple dan tidak berhasil, tab Apollo DevTools tersedia tetapi selalu kosong dan saya mendapatkan kesalahan berikutnya. https://github.com/apollographql/apollo-link-rest/tree/master/examples/simple

@fbartho Saya melakukan hal yang sama dengan proyek yang saya kerjakan bereaksi asli dengan react-native-debugger dan mendapat masalah yang sama. Bisakah Anda membagikan penyiapan Anda atau versi apa yang Anda gunakan?

Kami belajar hari ini bahwa itu berfungsi - tetapi bukan tab GraphiQL, hanya tab lain: https://github.com/apollographql/apollo-client-devtools/issues/227

Karena apa yang tampaknya menjadi masalah yang sama ini, saya tidak dapat membaca skema lokal Docs di devtools GraphiQL.

Menjalankan kueri introspeksi ini akan menampilkan [object Object] di panel respons, dan laporan konsol [Network error]: TypeError: forward is not a function

{
  __schema {
    types {
      name
    }
  }
}

Klien saya tidak memiliki server 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;
}

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

Tidak yakin apakah ini benar-benar terkait dengan kasus penggunaan seperti semua orang di atas, tetapi ini adalah satu-satunya hasil pencarian relevan yang dapat saya temukan dengan kesalahan yang saya dapatkan yang akhirnya saya selesaikan.

Baru-baru ini saya mengalami kesalahan ini ketika mencoba menambahkan apollo-link-rest ke aplikasi yang sudah ada menggunakan @apollo/client .

tl; dr Masalahnya ternyata Anda tidak dapat melewatkan uri dan link sebagai parameter opsi saat menentukan ApolloCient . Sebagai gantinya, Anda harus menghapus parameter uri dan membuat HttpLink menggunakan createHttpLink dan kemudian menggunakan from() untuk menggabungkan tautan Anda dan tautan tersebut ke link parameter opsi.

Sebelum saya menambahkan tautan lainnya, seperti inilah definisi saya:

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

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

Saat membaca dokumentasi, saya mendapat kesan bahwa saya harus dapat menambahkan tautan istirahat dengan menentukan RestLink dan menambahkan parameter link ke opsi saya seperti ini:

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

Namun, konfigurasi ini menyebabkan kesalahan TypeError: forward is not a function terjadi dan klien tidak lagi bekerja.

Setelah membaca lebih jauh ke dalam dokumentasi tentang tautan, saya menyadari (meskipun saya tidak dapat melihatnya secara eksplisit, dan mungkin ada kasus di mana ini salah) bahwa Anda tidak dapat menggunakan uri dan link opsi parameter dalam definisi ApolloClient pada saat yang sama. Dengan menggunakan info baru ini saya dapat memperbaiki masalah dengan menghapus parameter uri dan membuat HttpLink yang kemudian saya gabungkan dengan RestLink menggunakan from() dan semuanya akhirnya bekerja (perhatikan bahwa sesuai dokumentasi , RestLink harus pergi sebelum 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]),
});

terima kasih @crbanman kamu menyelamatkan hariku! 💯

Apakah halaman ini membantu?
0 / 5 - 0 peringkat