标签: apollo

如何为 graphql-client 设置超时

我正在尝试timeout设置prisma-labs/graphql-request. 我已经尝试过此处描述的方法 - https://github.com/prisma-labs/graphql-request/issues/103

const client = new GraphQLClient(config.url, {
  timeout: 30000,
  headers: {
    Authorization: `Bearer ${token}`
  }
})
Run Code Online (Sandbox Code Playgroud)

我的编译器抱怨超时没有直接出现在选项界面中 - https://github.com/prisma-labs/graphql-request/blob/master/src/types.ts#L7

我是否需要扩展选项接口以使用超时字段?

apollo graphql graphql-js apollo-client prisma-graphql

7
推荐指数
1
解决办法
2万
查看次数

Apollo 客户端的代码生成器在我的类型中添加了不需要的“或 null”

Apollo 客户端的代码生成器添加| null了生成的类型,我不明白它们为什么在那里以及如何摆脱它们。

我不明白为什么 API 会返回 null 数组,所以我不想每次都检查我的代码是否为 null。

来自 apollo codegen 的违规生成类型:

export interface MusicGenres_musicGenres {
  name: string;
}

export interface MusicGenres {
  musicGenres: (MusicGenres_musicGenres | null)[];
                                        ^^^^^^
                                         WHY ?
}
Run Code Online (Sandbox Code Playgroud)

我的 Graphql 架构:

type Query {
  musicGenres: [MusicGenre]!
}

type MusicGenre {
  id: ID!
  name: String!
}
Run Code Online (Sandbox Code Playgroud)

在我的 TypeScript 代码中查询生成类型:

gql`
  query MusicGenres {
    musicGenres { name }
  }
`
Run Code Online (Sandbox Code Playgroud)

apollo graphql typescript-typings apollo-client

7
推荐指数
1
解决办法
2706
查看次数

在 Apollo Client 3 中合并非规范化数据时出现“缓存数据可能丢失”警告

我正在将使用 Apollo Client 的应用程序从 v2 升级到 v3,但找不到以下问题的正确解决方案。

我有一个产品的架构,在这个产品中,有一个价格。这个价格不是一个简单的数字,因为它包含免税价值、所有税金包括价值和增值税。

type Product {
   id: ID
   price: Price
}

type Price {
   dutyFree: Float
   allTaxesIncluded: Float
   VAT: Float
}
Run Code Online (Sandbox Code Playgroud)

在 Apollo Client 2 中,只要没有明确的 id 或 _id 属性,InMemoryCache 就会根据对象的路径创建回退假标识符来规范数据。

在 Apollo Client 3 中,不再生成此后备假标识符。相反,您有两种选择来处理非规范化数据。第一个是使用新的 TypePolicy 选项并明确指示您收到的数据不应标准化。在这种情况下,数据将链接到父规范化数据。

文档:

未规范化的对象会嵌入到缓存中的父对象中。您不能直接访问这些对象,但可以通过它们的父对象访问它们。

new InMemoryCache({
   typePolicies: {
      Price {
         keyFields: false
      }
   }
})
Run Code Online (Sandbox Code Playgroud)

都很开心,虽然我的问题解决了。好吧,错了......我可以在我的应用程序中创建一个产品并添加一个价格。但是,每当我更改现有价格时,都会收到以下警告:

替换 Product 对象的 price 字段时,缓存数据可能会丢失。

因为,当我在更新后获取我的 Product 时,InMemoryCache 不知道如何合并字段 Price 因为没有定义 id,这是非规范化数据的点。

我知道有第二个选项可以为我的 Product.price 字段显式定义合并函数,但这个例子是现实的一个更简单的版本。我通过多个类型为 Price 的对象有大量字段,并且为每个对象手动定义一个合并函数(即使通过外部化函数中的公共逻辑)是我发现效率非常低和错误的来源。

所以我的问题是:我对这个keyFields: false选项有什么误解,我可以做些什么来解决这个问题,而不必求助于在我的应用程序中为 50 多个字段定义合并函数? …

apollo apollo-client

7
推荐指数
1
解决办法
852
查看次数

如何有条件地在 GraphQL 查询中包含过滤参数?

我有以下 GraphQL 查询(使用 Apollo Client JS):

query GetUsers($searchFilter: String) {
    users(
        first: 10,
        filter: { search: $searchFilter }
    ) {
        nodes {
            id
            name
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我传递参数时,这很有效$searchFilter。但是,我希望这个$searchFilter参数是可选的。因此,当它出现时,null它不会应用过滤器。

这看起来很简单,但 API 要求search不可为空。filter: { search: null }所以不允许传入。

我想实现以下目标:

query GetUsers($searchFilter: String) {
    users(
        first: 10,
        filter: $searchFilter = null ? null : { search: $searchFilter }
    ) {
        nodes {
            id
            name
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我如何有条件地包含filter参数?

javascript apollo graphql

7
推荐指数
1
解决办法
1万
查看次数

Apollo Client - 使用对象列表中的缓存结果来响应对单个对象的查询

是否可以将 Apollo Client 配置为从返回项目列表的查询中获取单个缓存的项目,以便在查询单个项目时预取数据?

架构:

type Item {
  id: ID!
  name: String!
}

type Query {
  items: [Item!]!
  itemById(id: ID!): Item!
}
Run Code Online (Sandbox Code Playgroud)

查询 1:

query HomepageList {
  items {
    id
    name
  }
}
Run Code Online (Sandbox Code Playgroud)

查询 2:

query ItemDetail($id: ID!) {
  itemById(id: $id) {
    id
    name
  }
}
Run Code Online (Sandbox Code Playgroud)

鉴于单个 Item 的数据已经在缓存中,应该可以使用已经缓存的数据,同时仍然执行提取,以防任何数据发生更改。

然而,查询并不使用缓存的数据(至少默认情况下),似乎我们需要以某种方式告诉 Apollo 我们知道该 Item 已经在缓存中。

非常感谢任何帮助。

javascript caching apollo graphql apollo-client

7
推荐指数
1
解决办法
494
查看次数

如何将 auth0 访问令牌添加到react-apollo

我正在尝试在 React js 中向 apollo 客户端添加授权令牌以让用户登录...

\n

索引.js

\n
import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { BrowserRouter as Router } from 'react-router-dom';\nimport { ThemeProvider } from 'react-jss';\nimport Theme from 'resources/theme';\nimport Routes from 'routes';\nimport './index.css';\nimport * as serviceWorker from './serviceWorker';\nimport { Auth0Provider } from "@auth0/auth0-react";\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport ReactNotification from 'react-notifications-component'\nimport './components/orders/fonts/NotoSansJP-Regular.otf'\nimport 'react-notifications-component/dist/theme.css'\nimport { ApolloProvider , ApolloClient, InMemoryCache } from '@apollo/client';\nimport { useAuth0 } from "@auth0/auth0-react";\n\n\nconst client = new ApolloClient({\nuri: process.env.REACT_APP_API_BACK ,\nheaders: {\n  Authorization: `Bearer ${accessToken}` // doesn\xe2\x80\x99t work \n },\n  cache: …
Run Code Online (Sandbox Code Playgroud)

apollo reactjs auth0 react-apollo apollo-client

7
推荐指数
1
解决办法
2307
查看次数

如何在 Nuxt.js 中捕获服务器错误,以免导致页面渲染崩溃?(Vue)

语境

这个问题与我的另一个问题有关,How to handle apollo client errors crashing page render in Nuxt? ,但我会尽量保持孤立,因为我希望这个问题只关注 Nuxt(减去 apollo)。但是,我决定单独提出这个问题,因为我正在寻找完全不同的响应/解决方案。

问题

我目前正在维护一个生产 Nuxt/Vue 应用程序,该应用程序使用该@nuxt/apollo模块发出 GraphQL 请求。

问题是,我们依赖的 GraphQL 服务器时不时出现故障并返回一个 HTML 错误页面,这会导致 Apollo 客户端崩溃。但是因为我们将 Apollo 作为 nuxt 模块加载,它也会使页面渲染管道崩溃。给我们一个看起来像这样的通用服务器错误页面;

页面错误

服务器错误 应用程序中发生错误,无法提供您的页面。如果您是应用程序所有者,请检查您的日志以了解详细信息。

以及以下堆栈跟踪:

 ERROR  Network error: Unexpected token < in JSON at position 0                                                            08:11:04

  at new ApolloError (node_modules/apollo-client/bundle.umd.js:92:26)
  at node_modules/apollo-client/bundle.umd.js:1588:34
  at node_modules/apollo-client/bundle.umd.js:2008:15
  at Set.forEach (<anonymous>)
  at node_modules/apollo-client/bundle.umd.js:2006:26
  at Map.forEach (<anonymous>)
  at QueryManager.broadcastQueries (node_modules/apollo-client/bundle.umd.js:2004:20)
  at node_modules/apollo-client/bundle.umd.js:1483:29
  at processTicksAndRejections (node:internal/process/task_queues:94:5)
Run Code Online (Sandbox Code Playgroud)

然而,这些堆栈跟踪都不允许我们看到 nuxt 在哪里抛出错误,因此我们可以处理它。

我们尝试过的

在过去的几周里,我们已经用尽了所有的选择来调查这个问题。我们首先尝试通过使用所有 3 …

javascript apollo vue.js nuxt.js

7
推荐指数
1
解决办法
1749
查看次数

如何从查询中检索 Apollo 客户端中的日期字段作为日期而不是字符串?

使用以下 graphql:

scalar Date

type MyModel {
  id: ID!
  date: Date!
}

query MyModels {
  myModels {
    id
    date
  }
}

type Query {
  myModel: [MyModel!]
}
Run Code Online (Sandbox Code Playgroud)

和解析器:

import { DateTimeResolver } from 'graphql-scalars'
const resolvers = {
  // Scalars
  Date: DateTimeResolver,

  myModels: async () => {
    return await context.user.getMyModels()
  }
}
Run Code Online (Sandbox Code Playgroud)

我的查询返回date: "2021-02-07T06:58:51.009Z". 是否可以让 Apollo Client 将其转换为 Date 对象?

apollo graphql react-apollo apollo-client

7
推荐指数
1
解决办法
4586
查看次数

Apollo readQuery,从缓存中获取数据

我正在尝试从 Apollo 缓存获取数据。我知道数据在那里,因为在 Apollo 开发工具中指定的记录可用。在我的 React 应用程序中,我进行了简单的单击并设置了 Id,该 Id 随后传递给查询。结果client.readQuery(...)null. 我在旋转,因为不知道为什么。我使用的代码与文档中的代码完全相同。

这是一个查询:

export const RECRUIT_QUERY = gql`
  query Recruit($id: ID!) {
    Recruit(_id: $id) {
      _id
      firstName
    }
  }
`;
Run Code Online (Sandbox Code Playgroud)

组件中apollo hooks的使用:

const client = useApolloClient();
const recruit = client.readQuery({
  query: RECRUIT_QUERY,
  variables: { id: selectedId }
})
Run Code Online (Sandbox Code Playgroud)

阿波罗的配置:

export const client = new ApolloClient({
  link: concat(
    authMiddleware,
    new HttpLink({
      uri: process.env.REACT_APP_API_URL,
    }),
  ),
  cache: new InMemoryCache(),
});
Run Code Online (Sandbox Code Playgroud)

这是 apollo 商店预览: 在此输入图像描述

apollo graphql react-apollo apollo-client

7
推荐指数
1
解决办法
8628
查看次数

如何解决 Apollo Studio Sanbox Cors?

我无法使用 apollo Studio。迁移到 Graphql 游乐场后。当我尝试在本地主机中运行并将我重定向到 apollo studio sanbox https://studio.apollographql.com/sandbox?endpoint=http%3A%2F%2Flocalhost%3A5018%2Fgraphql时:无法连接到本地主机。

请帮忙解决这个问题

apollo apollo-server prisma prisma-graphql prisma2

7
推荐指数
1
解决办法
3979
查看次数