标签: apollo

更新 websocket graphql 中的授权标头

我正在尝试使用 firebase 和 websockets (在 React Native 上)在 Graphql 中实现身份验证。

客户端使用 firebase 进行身份验证并获取令牌。然后,它通过 websocket 客户端将令牌发送到服务器,该客户端使用 admin sdk 验证用户。

我面临两个问题:

  1. 当应用程序启动时,它会建立一个 ws 连接,此时它没有授权标头。用户使用 firebase 一段时间后会获得一个令牌。

  2. 令牌会在一段时间后过期,因此一段时间后我需要更新 websocket 连接中的授权标头,并重新运行因令牌过期而被拒绝的查询、突变或订阅。

有没有办法更新授权标头并重新运行查询?

我是否需要关闭以前的连接并使用授权标头中的新令牌打开一个新连接?这是怎么做到的?

我正在使用 apollo-server、apollo-client、apollo-link、subscriptions-transport-ws。

websocket apollo graphql apollo-server

4
推荐指数
1
解决办法
4832
查看次数

Apollo 客户端缓存没有按我的预期工作

我的问题:

我对 GraphQL 还很陌生,我正在使用 Apollo 服务器和客户端开发我的第一个全栈应用程序,这是一个简单的博客。

在客户端,我在两个不同的页面中使用相同的查询,但使用不同的变量。查询是通过 ID 或 slug 查询博客文章,具体取决于我使用的页面。所以结果是一样的,只是查询变量发生了变化。

当我在一个页面中使用查询时,我认为由于 Apollo 缓存,查询不会在第二页上运行。但事实并非如此。查询在第二个页面中再次运行,当然返回的结果与其他页面中的结果相同。

为什么 Apollo 在这种情况下不使用缓存?

这是我使用的代码:

在服务器端,我有一个非常基本的查询来从博客中获取文章,可以通过 ID 或 Slug 获取:

type Query {
  ...
  article(id: ID, slug: String): Article
  ...
}
Run Code Online (Sandbox Code Playgroud)

在客户端,如果文章已发布,我会通过 slug 查询文章;如果文章仍是草稿,我会通过 ID 查询文章。

通过 slug 进行查询:

<Query
  query={article}
  variables={{ slug }}
  fetchPolicy="cache-and-network"
>
  {({ loading, error, data }) => {
    return (
      <Article
        loading={loading}
        article={data && data.article}
      />
    );
  }}
</Query>
Run Code Online (Sandbox Code Playgroud)

通过ID查询是相同的,除了变量param使用ID:

<Query
  query={article}
  variables={{ id }}
>
  {({ loading, error, data }) => …
Run Code Online (Sandbox Code Playgroud)

apollo graphql react-apollo apollo-client

4
推荐指数
1
解决办法
5581
查看次数

如何在 Apollo graphql 中添加联合类型

我创建了这个问题,以防有人对如何在 Apollo 中添加联合/多态类型感到好奇。希望这会让他们更容易。

在此示例中,我希望响应为 aWorksheetApiError

// typedefs.js
export default [`
  schema {
    query: Query
  }

  type Query {
    worksheet(id: String!): Worksheet | Error
  }

  type Worksheet {
    id: String!
    name String
  }

  type ApiError {
    code: String!
    message: String!
  }
`];

// resolvers.js
export default {
  Query: {
    worksheet(_, args, { loaders }) {
      return loaders.worksheet.get(args.id).catch(() => {
        // ApiError
        return {
          code: '1',
          message: 'test'
        }
      });
    }
  }
};

// Express Server 
import …
Run Code Online (Sandbox Code Playgroud)

apollo graphql-js apollo-server react-apollo graphql-tools

4
推荐指数
1
解决办法
4298
查看次数

如何从 graphql 模式中获取所有类型的列表?

在客户端上,我通过introspectSchema获取架构。

在我的应用程序中,我想获取模式中所有类型的列表,但解析现有对象是非常困难的任务。

有什么好的办法吗?

javascript apollo reactjs graphql apollo-client

4
推荐指数
1
解决办法
7143
查看次数

结果缺少 allposts 属性

我是 Django 开发人员,所以第一次接触 vue 和 graphql,我不知道如何准确处理这个错误。

在此输入图像描述

这是我的代码,我的查询可能有问题,


    <template>
      <section>
        <div class="home">
          <h2>hiii</h2>
          <div v-for="i in allposts" :key="i.id">
            <ul>
              <li>
                <h3>hey</h3>
                <strong>{{id}}</strong>:
                <span>{{title}}</span>
              </li>
            </ul>
          </div>
        </div>
      </section>
    </template>

    <script>
    import gql from "graphql-tag";

    const PostQuery = gql`
      query allposts {
        allPosts {
          id
          title
        }
      }
    `;

    export default {
      props: [],
      data() {
        return {
          allposts: []
        };
      },

      apollo: {
        allposts: PostQuery
      }
    };
    </script>
Run Code Online (Sandbox Code Playgroud)

可以看到数据已成功获取

在此输入图像描述

谁能指导我在这里做错了什么?

提前致谢。

apollo vue.js graphql vuejs2

4
推荐指数
1
解决办法
1488
查看次数

Apollo 客户端:apollo-link-rest 可以解决端点之间的关系吗?

我必须使用的其余 api 提供多个端点上的数据。结果中的对象可能具有 api 无法直接解析的关系,而是提供指向实际资源的 id。

示例: 为了简单起见,假设一个Person可以拥有多个Books.

现在api/person/{i}端点返回:

{ id: 1, name: "Phil", books: [1, 5, 17, 31] }
Run Code Online (Sandbox Code Playgroud)

端点api/book/{i}返回此(请注意,作者可能又是一个关系):

{ id: 5, title: "SPRINT", author: 123 }
Run Code Online (Sandbox Code Playgroud)

有什么方法可以教 apollo 客户端以我可以编写以下(或类似)查询的方式解析这些端点:

query fetchBooksOfUser($id: ID) {
  person (id: $id) {
    name,
    books {
      title
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

apollo graphql react-apollo apollo-client apollo-link-rest

4
推荐指数
1
解决办法
896
查看次数

如何更改 Apollo 服务器 WS 路径?

有什么方法可以更改 Apollo Server WS 的路径(server.subscriptionsPath)?

默认路径是“/graphql”。如何设置其他路由,例如“ws://localhost:3000/api”?

import express from 'express'
import http from 'http'
import { ApolloServer } from 'apollo-server-express'

const app = express()

// ...

const server = new ApolloServer({
  typeDefs,
  resolvers,
})

const httpServer = http.createServer(app)
server.installSubscriptionHandlers(httpServer)

console.log('server.graphqlPath', server.graphqlPath)
console.log('server.subscriptionsPath', server.subscriptionsPath)

httpServer.listen({ port:300 })
Run Code Online (Sandbox Code Playgroud)

apollo graphql apollo-server

4
推荐指数
1
解决办法
3195
查看次数

Apollo Server 的 gql 标签和 schema.gql 文件有什么区别?

Apollo Server 文档仅提供了一种定义 GraphQL 模式 typeDef 的方法,即使用标签gql。但是,我看到了使用schema.gql文件的替代方法。

这些方法之一已经过时了吗?

使用其中一种方法有什么优点或缺点?

.gql尽管支持该文件类型,为什么 Apollo Server 文档没有提及该文件类型?

javascript typescript apollo graphql apollo-server

4
推荐指数
1
解决办法
1149
查看次数

集成 apollo ios 客户端时出现“正在加载未命名项目的架构”错误

我正在尝试集成 apollo iOS 客户端,在完成所有步骤后,我在运行构建阶段脚本时收到错误。所以一共有三个错误。一个是

  1. 初始化 Apollo GraphQL 项目“未命名项目”时出错。
  2. 错误:“加载未命名项目的架构”时出错。
  3. 类型错误:无法读取 Object.error 处未定义的属性“reduce”。

请注意,这是在node_modules/@oclif 内部发生的。

Error initializing Apollo GraphQL project "Unnamed Project": Error: Error in "Loading schema for Unnamed Project": TypeError: Cannot read property 'reduce' of undefined

ios apollo swift graphql apollo-ios

4
推荐指数
1
解决办法
4001
查看次数

Apollo codegen:generate 给出错误“使用‘typescript’目标生成查询文件”

我在 Express 上有 Apollo Graph 的后端。

在我的客户端 React 应用程序中,我下一步要做的是:

apollo codegen:generate --excludes=node_modules/* --includes=**/*.tsx --target typescript --tagName gql --outputFlat generate
Run Code Online (Sandbox Code Playgroud)

我等待生成文件夹,但此命令给出了下一个错误:

Error: There are multiple definitions for the herewas operation. 
All operations in a project must have unique names. 
If generating types, only the types for the first definition 
found will be generated.at GraphQLClientProject.checkForDuplicateOperations 
(....\node_modules\apollo\node_modules\apollo-language-server\lib\project\base.js:129:31)
.........
.........
Generating query files with 'typescript' target
> Apollo does not support anonymous operations
Run Code Online (Sandbox Code Playgroud)

我还有 apollo.config.js:

module.exports = {
  client: {
    service: {
      url: "http://localhost:4000/graphql" …
Run Code Online (Sandbox Code Playgroud)

typescript apollo reactjs graphql react-apollo

4
推荐指数
1
解决办法
3803
查看次数