Apollo Link 响应标头

2024-01-03

我在一个简单的 React 应用程序中使用最新版本的 Apollo Client,并尝试从响应中提取一个标头值,该标头值用于显示返回的记录集的大小。

我意识到这不是提供结果集大小的最优雅的方式,但这就是 API 目前的设置方式。

我希望使用中间件类型选项来执行此操作,但是当我检查响应对象时,我似乎无法提取任何标头。

网络跟踪确实显示响应标头符合预期,因此我怀疑我误解了如何获取我需要的底层对象。

我已经检查了文档,但没有什么是显而易见的,因此这里的问题......


当后端响应时,标头应包含:

Access-Control-Expose-Headers: *// 或您的refreshToken 字段的名称

这里有完整的代码:

前端:(Apollo 和 React)

const httpLink = new HttpLink({ uri: URL_SERVER_GRAPHQL })

// Setup the header for the request
const middlewareAuthLink = new ApolloLink((operation, forward) => {
  const token = localStorage.getItem(AUTH_TOKEN)

  const authorizationHeader = token ? `Bearer ${token}` : null
  operation.setContext({
    headers: {
      authorization: authorizationHeader
    }
  })
  return forward(operation)
})
// After the backend responds, we take the refreshToken from headers if it exists, and save it in the cookie.
const afterwareLink = new ApolloLink((operation, forward) => {
  return forward(operation).map(response => {
    const context = operation.getContext()
    const { response: { headers } } = context

    if (headers) {
      const refreshToken = headers.get('refreshToken')
      if (refreshToken) {
        localStorage.setItem(AUTH_TOKEN, refreshToken)
      }
    }

    return response
  })
})

const client = new ApolloClient({
  link: from([middlewareAuthLink, afterwareLink, httpLink]),
  cache: new InMemoryCache()
})

在后端(快递)。 如果我们需要刷新令牌(例如:因为实际的令牌即将过期)

const refreshToken = getNewToken()
res.set({
  'Access-Control-Expose-Headers': 'refreshToken', // The frontEnd can read refreshToken
  refreshToken
})

文档来自:https://www.apollographql.com/docs/react/networking/network-layer/#afterware https://www.apollographql.com/docs/react/networking/network-layer/#afterware

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apollo Link 响应标头 的相关文章

随机推荐

  • Web.config 中的程序集

    我从事 NET开发大约有一年了 但我仍然不知道这样做的目的是什么
  • Flutter 中是否可以监听系统语言的变化?

    当用户更改系统语言时是否可以收听 当用户更改语言时 我需要清除一些列表 现在我正在检测中的语言void main 启动时运行 void main async Firebase Push Notifications initializatio
  • 如何处理 HTTP 响应中的多个 Set-Cookie 标头

    我正在尝试出于某种目的编写简单的代理服务器 在其中我使用 httplib 来访问远程 Web 服务器 但有一个问题 Web 服务器在一个响应中返回两个 Set Cookie 标头 而 httplib 在 httplib HTTPRespon
  • 更改 UINavigationBar 高度

    有人可以告诉我如何更改导航栏高度吗 这是我到目前为止所拥有的 CGFloat navBarHeight 10 self navigationController navigationBar frame size width navBarHe
  • 使用 EGit 进行合并会导致提交合并所做的所有更改

    我正在使用带有 EGit 的 Eclipse 并且我的 origin master 位于 github 上 这个项目有 3 名程序员工作 当我将更改拉到本地 git 使用 EGit 并且存在冲突时 我会解决它们 没有问题 问题是 当我提交时
  • 按值而非引用将对象属性复制到映射

    我不确定哪里出了问题 但似乎我无法从对象实例复制属性并将它们分配给映射 而在保存实例后不更改值 这是一个示例类 class Product String productName String proudctDescription int q
  • Django 中相同表单的两个不同的提交按钮

    我在 Django 中有一个 UpdateView 我只有一个普通的提交按钮 当对象正确更新时 它会通过以下方式重定向到对象列表success url 我可以制作两个不同的提交按钮 一个提交并重定向到对象列表页面 ListView 的按钮
  • 在 django 中通过一个查询获取多行?

    如何构建一个从 django 获取多行的 QuerySet 我认为 filter 会起作用 但它似乎更糟 例如 我在模型 Car 中有两行 具有两个文本属性 许可证和 vin 现在假设我想打印这些汽车的执照和车辆证明 我怎样才能通过一次数据
  • 使用 JavaFX 制作 Eclipse 插件? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我计划为 Eclipse 开发一组丰富的插件 其中涉及 Eclipse 内的 3D 图形渲染 JavaFX 是开发 Eclipse 插件的良好技
  • 如何在基于类的视图中返回 JSON 响应,而不是 HTTP 响应

    我有一个基于阶级的观点 我在引导模式上使用 Ajax 为了避免页面刷新 我想使用基于类的视图返回 JSON 响应而不是 HTTP 响应 但我只看到了如何为基于函数的视图返回 JSON 响应 视图 py from django contrib
  • 努力将 Objective C 选择器和目标签名转换为 Swift

    再会 我正在尝试将 Objective C 代码片段转换为 Swift 我知道选择器可以通过将其放入字符串中来直接翻译 但我无法理解 Objective C 签名 Objective C 选择器 第二个参数 UIImageWriteToSa
  • React Native FAILURE:构建失败并出现异常。无法解析“:classpath”。找不到 com.android.tools.build:gradle:3.0.1

    当我发出命令 react native run android 时 它发生了 失败 构建失败并出现异常 What went wrong A problem occurred configuring root project AsomePro
  • 同时写入同一个文件

    好的 我知道这个网站上有关于这个问题的类似问题 但是这些问题和提供的答案都不是我所需要的 我正在构建基于平面文件的 CMS 例如 如果 2 3 10 追加模式下的fwrite请求同时到达同一个php文件 contact form messa
  • 将变量声明为无符号的重要性

    如果您知道变量永远不应该为负数 那么将变量声明为无符号是否重要 它是否有助于防止除负数之外的任何内容被输入到不应该包含负数的函数中 将语义上非负值的变量声明为unsigned是一种良好的风格和良好的编程实践 但是 请记住 这并不能阻止您犯错
  • PHP 解析 .dat 文件

    我有一个 dat 文件 本质上是 分隔文件 我正在尝试将其转换为制表符分隔的 txt 我不确定的问题是新文件的每一行将是原始文件的 3 行的组合 每个原始行都有不同数量的数据 第一列仅标识分组中的每一行 最好的方法是什么 原始数据样本 01
  • python:如何在服务器端检测客户端断开连接?

    我正在用 python 进行套接字编程 我想在服务器端检测客户端套接字断开连接 Client socket connect host port try send something to server and get response fr
  • pandas 统计每个日期过去 7 天的值

    有两个数据框 首先是这样的 print df1 id date month is buy 0 17 2015 01 16 2015 01 1 1 17 2015 01 26 2015 01 1 2 17 2015 01 27 2015 01
  • Jetty 的 httpClient.setResponseBufferSize() 方法有什么作用吗?

    我正在使用 Jetty 的 HttpClient 构建一个简单的代理服务器 我在 Java 1 8 0 45 上使用 Jetty 版本 9 3 10 v20160621 我遇到过这样的情况 我对资源执行 GET 操作 该资源将返回大小约为
  • “<”附近的语法不正确

    我的任务是获取一些在 SQL Server 2012 上正常工作的代码 以便在 SQL Server 2008 R2 上也能正常工作 我收到这个错误 附加信息 当我尝试运行我的代码时 我发现这行 SQL 代码有问题 ALTER TABLE
  • Apollo Link 响应标头

    我在一个简单的 React 应用程序中使用最新版本的 Apollo Client 并尝试从响应中提取一个标头值 该标头值用于显示返回的记录集的大小 我意识到这不是提供结果集大小的最优雅的方式 但这就是 API 目前的设置方式 我希望使用中间