Apollo-link-rest: “ TypeError:正向不是函数”

创建于 2018-11-14  ·  19评论  ·  资料来源: apollographql/apollo-link-rest

iya

每次使用apollo-link-rest时,我都会遇到相同的错误:在Apollo devtools中打开GraphiQL总是显示“ 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)" ] } ] }

使用@rest指令进行的查询和变异似乎工作正常,并且不会引发任何其他错误,因此这不是一个完全阻止的问题,但是它确实会影响其他Apollo Client功能,例如,尝试使用@client指令不起作用并抛出相同的错误(如组件来自react-apollo)。

我克隆了三个示例react-apollo项目(简单,高级,打字稿),并且在这三个示例中都出现了相同的错误。 #121引用了此问题,但似乎没有解决办法; 包含的修复程序是针对单独的“无法获取”错误的。 也有人提到缺少@rest@client指令是潜在的原因,但是正如前面提到的,这种情况在示例项目以及我自己的项目中都在发生,因此我不认为缺少指令是罪魁祸首。

要重现,只需克隆示例项目,在Chrome中安装并启动并打开Apollo开发工具(当前版本,我遇到的错误是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 :

感谢您为该库所做的所有工作。 如果我能以任何方式提供帮助,我很乐意提供帮助。

所有19条评论

我认为GraphIQL不支持apollo-link-state / apollo-link-rest-我不认为它们总体上支持链接。 你有工作的例子吗?

当然,Apollo开发工具中的GraphiQL似乎可以正常工作。 使用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您的缓存面板为空,对吗?

没有人知道如何在没有devtools的情况下查看缓存吗?

我正在经历同样的事情。 @cgatian是的,我的缓存面板为空。

当这些破损发生了这么长时间时,很难接受阿波罗的工具链。 是否仍在积极进行apollo-link-rest?

@heymanhn-是,ApolloLinkRest正在积极开发中。 但这是开源的。 我很乐意帮助您进行PR的测试和交付,但是我没有ApolloDevTools的经验。

我们需要有人做,或者愿意深入他们的代码库,以找出与之兼容的必要条件。 我向您挑战,以找出缺失的部分,我很乐意支持您的贡献!

我想清楚一点,我不知道apollo-link-rest曾经与ApolloDevTools一起工作过,所以我想说这不是一个破绽,而是更多的缺少所需功能

另外,我个人将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 :

感谢您为该库所做的所有工作。 如果我能以任何方式提供帮助,我很乐意提供帮助。

我最近遇到了这个问题,并且将错误范围缩小到了IntrospectionQuery,我相信这是graphiql / devtools向graphql服务器查询架构的吗? 问题是,我仅使用apollo-client和apollo-link-rest,因此除了高速缓存模式(如果有)之外,没有服务器或模式。 反过来,我的apollo devtools是空白的。 不能完全确定这里的解决方案是什么,所有事情都在某一时刻起作用。

我最近遇到了这个问题,并且将错误范围缩小到了IntrospectionQuery,我相信这是graphiql / devtools向graphql服务器查询架构的吗? 问题是,我仅使用apollo-client和apollo-link-rest,因此除了高速缓存模式(如果有)之外,没有服务器或模式。 反过来,我的apollo devtools是空白的。 不能完全确定这里的解决方案是什么,所有事情都在某一时刻起作用。

同样在这里

最近在上周四,我们看到ApolloDevTools与React Native Debugger中的apollo-link-state,apollo-link-Rest一起使用。 我们确定这仍然是一个活跃的问题吗? 您在@ edgars-sirokovs上使用什么版本?

最近在上周四,我们看到ApolloDevTools与React Native Debugger中的apollo-link-state,apollo-link-Rest一起使用。 我们确定这仍然是一个活跃的问题吗? 您在@ edgars-sirokovs上使用什么版本?

@fbartho 2.2.4

@fbartho刚刚再次检查-现在可以正常工作了。 至少不再是空白了。
我仍然有问题-无法滚动缓存视图,Documentation Explorer没有显示架构(我只有通过typeDefs传入的客户端架构)。

我不知道文档浏览器需要哪些支持apollo-link-rest,但如果有工作要做,也不会令我感到惊讶,和/或它将永远无法正常工作。 如果需要在这里接受PR,请接受!

滚动缓存视图绝对看起来像是ApolloDevTools代码中的错误,

但我很高兴您在@ edgars-sirokovs上取得了进步!

最近在上周四,我们看到ApolloDevTools与React Native Debugger中的apollo-link-state,apollo-link-Rest一起使用。 我们确定这仍然是一个活跃的问题吗? 您在@ edgars-sirokovs上使用什么版本?

我使用simple项目进行了测试,但该测试无法正常工作,Apollo DevTools选项卡可用,但始终为空白,并且出现下一个错误。 https://github.com/apollographql/apollo-link-rest/tree/master/examples/simple

@fbartho我对我正在使用react-native-debugger的react native工作的项目执行了相同的操作,并遇到了相同的问题。 您可以分享您的设置或使用什么版本?

今天我们了解到它可以工作-但GraphiQL选项卡无效,仅其他选项卡有效: https :

由于似乎是同一问题,因此无法在devtools GraphiQL中读取本地架构Docs

运行此自省查询会在响应面板中显示[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/client向现有应用程序添加apollo-link-rest时遇到了此错误。

tl; dr问题原来是,在定义新的ApolloCient时,您不能同时传递urilink作为选项参数。 相反,您必须删除uri参数,并使用createHttpLink创建一个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错误发生,并且客户端不再工作。

在进一步阅读了有关链接的文档后,我意识到(尽管我看不到它的明确说明,并且在某些情况下这可能是不正确的)您不能使用urilinkApolloClient定义中的link选项参数。 使用此新信息,我能够通过删除uri参数并创建一个HttpLink来解决该问题,然后使用from()RestLink合并,并一切最终都成功了(请注意,根据文档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 等级

相关问题

timhwang21 picture timhwang21  ·  7评论

fkolar picture fkolar  ·  5评论

karensg picture karensg  ·  5评论

sinisterra picture sinisterra  ·  6评论

Daniel-Griffiths picture Daniel-Griffiths  ·  5评论