标签: apollo

如何使用 apollo / graphql 实现节点查询解析器

我正在致力于为 graphql实现一个节点接口——一个非常标准的设计模式。

寻找有关为 graphql 实现节点查询解析器的最佳方法的指导

node(id ID!): Node

我正在努力解决的主要问题是如何对类型名的 ID 进行编码/解码,以便我们可以找到要查询的正确表/集合。

目前我正在使用 postgreSQL uuid 策略和 pgcrytpo 来生成 ids。

应用程序中执行此操作的正确接缝在哪里?:

  1. 可以在数据库的主键生成中完成
  2. 可以在 graphql 接缝处完成(也许使用访问者模式

一旦选择了最好的接缝:

  1. 你如何/在哪里编码/解码?

请注意我的堆栈是:

  • Apollo客户端/服务器(来自 graphql-yoga)
  • 节点
  • 类型ORM
  • PostgreSQL

postgresql apollo graphql apollo-server typeorm

3
推荐指数
1
解决办法
1826
查看次数

Apollo 正在 React 中混合 GraphQL 查询的结果

我正在拨打电话,返回问题及其答案。当我直接向服务器发送此消息时,响应符合预期。此外,当 React 进行调用并且我检查开发人员工具时,响应符合预期。

一旦我收到阿波罗的回应,数据就变得混杂,结果也相互渗透。

您会注意到,在这两张图中,扩展一些结果后的结果是相同的。我不确定是什么原因造成的。

在此输入图像描述

在此输入图像描述

为什么要结合自由形式?

我的设置是这样的:

我导入查询,然后在 Apollo 客户端上运行:

this.props.client.query({ query: getCoreObjectsQuery, variables: { companyId: 1}})
              .then((result) => {
                console.log(result, 'getCoreObjectsQuery')
Run Code Online (Sandbox Code Playgroud)

从那里,当我查看 getCoreObjectsQuery 时,它看起来像上面的图像!

apollo reactjs graphql react-apollo

3
推荐指数
1
解决办法
653
查看次数

如何使用apollo服务器对graphQl中的数据进行排序?

我使用 apollo-server 编写 graphql 代码。在发送数据之前,我想根据可选字段和过滤器对数据进行某种排序,并且我需要知道编写代码的正确方法?graphql中有没有一种方法可以自动对我的数据进行排序?

我使用lodash进行排序,我认为在我搜索后我看到了prisma但它们没有优化,但我的数据是由另一个不在数据库中的 api 返回的。我需要像棱镜这样的东西。

我的代码是这样的,我想根据查询中的名称或姓氏对书籍进行排序,但在 api 返回的实际书籍对象中。

const { ApolloServer, gql, } = require('apollo-server');

const books = [
{
    title: 'Harry Potter and the Chamber of Secrets',
    authors: [{"name":"a1", "lastName":"aa1"},{"name":"b1", "lastName":"bb1"},{"name":"c1", "lastName":"cc1"}]
  },
  {
    title: 'Jurassic Park',
    authors: [{"name":"a" ,"lastName":"aa"},{"name":"b", "lastName":"bb"},{"name":"c", "lastName":"cc"}]
  },
];
const typeDefs = gql`

type Book {
    title: String
    authors: [Author]
  }
type Query{
    books: [Book]
  }
type Author{
name: String
lastName: String
}
  `;
const resolvers = { …
Run Code Online (Sandbox Code Playgroud)

sorting node.js apollo graphql-js

3
推荐指数
1
解决办法
6435
查看次数

如何正确输入 Apollo 客户端 defaultOptions?

我正在像这样设置 Apollo 客户端。

const defaultOptions = {
  watchQuery: {
    fetchPolicy: 'cache-and-network',
    errorPolicy: 'ignore',
  },
  query: {
    fetchPolicy: 'cache-and-network',
    errorPolicy: 'all',
  },
  mutate: {
    errorPolicy: 'all',
  },
};
return new ApolloClient({
  link: ApolloLink.from([authLink, errorLink, webSocketOrHttpLink]),
  defaultOptions, // Typescript don't like this.
  queryDeduplication: true,
});
Run Code Online (Sandbox Code Playgroud)

打字稿给出了这个错误:

Type '{ watchQuery: { fetchPolicy: string; errorPolicy: string; }; query: { fetchPolicy: string; errorPolicy: string; }; mutate: { errorPolicy: string; }; }' is not assignable to type 'DefaultOptions'.ts(2322)
ApolloClient.d.ts(23, 5): The expected type comes from property …
Run Code Online (Sandbox Code Playgroud)

typescript apollo react-apollo apollo-client

3
推荐指数
1
解决办法
6210
查看次数

使用 graphql union 返回一个包含一些空对象的数组

我正在使用 graphql union - union FolderOrFile = Folder | File。当我仅查询文件夹时,我得到的数组包含带有空对象的文件夹对象,这些对象基本上是文件对象。

类型定义

const typeDefs = gql`
    union FolderOrFile = Folder | File
    type Folder {
        name: String
        path: String
        type: String
        children: [FolderOrFile]
    }
    type File {
        name: String
        path: String
        content: String
        type: String
        size: Int
        ext: String
        createdAt: String
    }
    type Query {
        folders: Folder
    }
`
Run Code Online (Sandbox Code Playgroud)

旋转变压器

const resolvers = {
    FolderOrFile: {
        __resolveType: obj => {
            if (obj.type === "file") {
                return 'File'
            }
            if (obj.type …
Run Code Online (Sandbox Code Playgroud)

union apollo graphql

3
推荐指数
1
解决办法
2042
查看次数

@Nuxt/Apollo 我如何从 gql 查询中删除“__typeName”

我正在开发 nuxt/apollo 包,但没有有关 addTypeName 属性的信息。这个属性应该在哪里设置呢?注意:所有安装都与@nuxt/apollo 有关。(作为模块等导入)

版本信息 :

"@nuxtjs/apollo": "^4.0.0-rc8",
Run Code Online (Sandbox Code Playgroud)

我在 nuxt.config.js 中的 apollo 配置:

    apollo: {
    includeNodeModules: false,
    authenticationType: 'Basic',
    defaultOptions: {
      $query: {
        loadingKey: 'loading',
        fetchPolicy: 'cache-and-network'
      }
    },
    clientConfigs: {
      default: {
        httpEndpoint: 'DEFAULT_GRAPHQL_ENDPOINT',
        tokenName: 'apollo-token' // optional
      },
      financial: {
        httpEndpoint: 'NEWS_GRAPHQL_ENDPOINT',
        tokenName: 'apollo-token',
        addTypename: false --> **Is not working**
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

我的 Index.vue 页面是:

apollo: {
data: {
  query: gql`
    {
      newsJson(take: 1) {
        key
        *GENERATES __typeName when sending request to Graphql*
      }
    } …
Run Code Online (Sandbox Code Playgroud)

apollo vue.js nuxt.js

3
推荐指数
1
解决办法
1840
查看次数

使用 apollo 客户端挂钩停止待处理的请求

看起来可以通过取消挂起的请求client.stop(),但是当我们使用apollo client hooks没有client.

如何使用 apollo 客户端挂钩停止待处理的请求?

apollo graphql react-apollo

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

Apollo+GraphQL - 启发式片段手动匹配

我有一个无头 Craft CMS,它通过 Apollo 通过 GraphQL 端点将数据返回到我的 Nuxtjs 应用程序。我有一个可以返回三种不同块类型之一的字段:richTextimagepullQuote

我的 GraphQL 端点如下所示:

query($section:[String], $slug:[String]) {
    entries(section: $section, slug: $slug) {
        id,
        title,
        uri,
        ... on blog_blog_Entry{
            contentEngine{
                __typename,
                ...on contentEngine_richText_BlockType{
                    __typename,
                    id,
                    richText
                    fontColor,
                    backgroundColor
                }
                ...on contentEngine_image_BlockType{
                    __typename,
                    id,
                    backgroundColor,
                    imageWidth,
                    image {
                        id,
                        url
                    }
                }
                ...on contentEngine_pullQuote_BlockType{
                    __typename,
                    id,
                    backgroundColor,
                    fontColor,
                    quote
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它返回数据很好,但是当我尝试在 Nuxt 组件中使用它时出现此错误:

您正在使用简单(启发式)片段匹配器,但您的查询包含联合或接口类型。Apollo 客户端将无法准确映射片段。要消除此错误,请使用IntrospectionFragmentMatcher文档中所述的方法:https ://www.apollographql.com/docs/react/advanced/fragments.html#fragment-matcher

令人气愤的是,该文档导致了 404 错误。我发现了一些其他引用此链接的 …

apollo graphql nuxt.js vue-apollo

3
推荐指数
1
解决办法
8379
查看次数

Apollo Server 作为 Nuxt 服务器中间件

我已经设法在 Nuxtjs 中拥有一个 Express + Apollo 后端作为服务器中间件。一切工作正常(身份验证、缓存、数据源、查询、突变),但现在我试图让订阅(websockets)运行,这给我带来了困难。

我尝试了这个示例https://www.apollographql.com/docs/apollo-server/data/subscriptions/#subscriptions-with-additional-middleware但即使让 httpServer 监听也不起作用。

这是我通过 nuxt.config.js 需要的 API 文件'~/api/index'

module.exports = async () => {
  const app = require('express')()
  const server = await require("./apollo")() // apollo-server-express w/ typeDefs and resolvers

  // apply Apollo to Express
  server.applyMiddleware({ app });
  console.log(` ApolloServer ready at ${server.graphqlPath}`);

  const httpServer = http.createServer(app);
  server.installSubscriptionHandlers(httpServer);
  console.log(` ApolloSubscriptions ready at ${server.subscriptionsPath}`);

  return {
    path: '/api',
    handler: httpServer
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我的游乐场给了我这个错误:"Could not connect to websocket endpoint ws://192.168.150.98:3000/api/graphql. Please …

subscription websocket express apollo nuxt.js

3
推荐指数
1
解决办法
2411
查看次数

fetchPolicy 选项:“no-cache”在 useQuery 中不起作用

这是我的代码

const { loading, error, data } = useQuery(HeaderPage.query, {
    fetchPolicy: "no-cache"
  });
Run Code Online (Sandbox Code Playgroud)

当我使用 fetchPolicy 时:“无缓存”。多次请求也不行。

为什么只发出一次请求?

javascript apollo reactjs react-apollo

3
推荐指数
1
解决办法
8006
查看次数