如何为 apollo-client 的每个请求设置变量?

Posted

技术标签:

【中文标题】如何为 apollo-client 的每个请求设置变量?【英文标题】:How to set variable for each request for apollo-client? 【发布时间】:2019-12-24 03:58:52 【问题描述】:

我正在使用 apollo-client 并希望为每个请求发送一些变量。我们称之为locale。我不想将它传递给每个 Query 组件,它不是 DRY 模式。

【问题讨论】:

【参考方案1】:

这可以通过使用中间件来实现:

import  ApolloClient  from 'apollo-client';
import  HttpLink  from 'apollo-link-http';
import  ApolloLink, concat  from 'apollo-link';

const httpLink = new HttpLink( uri: '/graphql' );

const authMiddleware = new ApolloLink((operation, forward) => 
  operation.setContext(
    headers: 
      locale: localStorage.getItem('locale') || 'en-US',
    
  );

  return forward(operation);
)

const client = new ApolloClient(
  link: concat(authMiddleware, httpLink),
);

查看文档:https://www.apollographql.com/docs/react/advanced/network-layer/

【讨论】:

【参考方案2】:

您可以添加一个中间件链接,它将即时修改您的operation

  class MiddlewareLink extends ApolloLink 
    request (operation: Operation, forward: NextLink) 
      operation.variables['prop1'] = 'value1'

      return forward(operation)
    
  

  ...
  const client = new ApolloClient(
    link: ApolloLink.from([
      new MiddlewareLink(),
      httpLink
    ])
  )

这种方式现在看起来是最正确的,也许以后apollo-link-http会被扩展,并且能够从上下文中接受一些数据并传递给变量。

【讨论】:

以上是关于如何为 apollo-client 的每个请求设置变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何为每个 http 调用中的默认请求标头创建 axios 配置?

如何为 apollo 客户端生成片段类型?

iOS 如何为每个 UIWebView 请求添加 cookie?

如何为每个请求制作一个 beanscript 函数

如何为容器设置正确的cpu millicores?

如何为 cassandra 设置读取请求超时