graphql - Relay.js 中的查看器

标签 graphql relayjs

为什么需要以及如何使用 viewer在 Relay.js 中正确吗?

我花了一周的时间来尝试理解 Relay.js。我现在对 GraphQL 很好,我也很了解它,但是我在将 GraphQL 和 Relay.js 结合到同一个应用程序中时遇到了一些问题。

第一步可能是了解 viewer .我看过很多使用它的例子和教程,但从来没有解释过,也不清楚它到底是什么以及它的用途。

中继文档提到 viewer几次,但甚至没有一个词来解释它。

我希望我能对这个问题有更多的了解,但恐怕网上没有解释。它仅用于代码中,脱离上下文将其剥离没有任何意义。无论如何,回答这个问题需要一些关于 Realy.js/GraphQL 的知识。

根据我检查过的无数示例,我的最佳猜测是它与用户有某种关系?如果用户是匿名的或已登录?根据登录状态或用户级别授予对数据的不同访问权限?

最佳答案

viewer不是特定于继电器的东西。这只是一个字段名称。你说得对。该字段通常表示应用程序的用户或查看者的 GraphQLObject 类型。

根查询类型是我们定义并作为 query 传递的 GraphQL 对象。在架构对象中。例如,在 todo example application ,它是 Root .

export const schema = new GraphQLSchema({
  query: Root,
  mutation: Mutation,
});

relay-treasurehunt example application , 根查询类型为 queryType .
export const schema = new GraphQLSchema({
  query: queryType,
  mutation: mutationType,
});

根查询类型是访问其他数据的主要访问点。这些其他数据被列为根查询对象的字段。与任何 GraphQL 对象一样,根查询类型可以有一个或多个字段。在 todo 示例应用程序中,它有一个名为 viewer 的字段。 :
const Root = new GraphQLObjectType({
  name: 'Root',
  fields: {
    viewer: {
      type: GraphQLUser,
      resolve: () => getViewer(),
    },
    node: nodeField,
  },
});

在relay-treasurehunt 示例应用程序中,根查询类型有一个名为game 的字段。 .
const queryType = new GraphQLObjectType({
  name: 'Query',
  fields: () => ({
    node: nodeField,
    game: {
      type: gameType,
      resolve: () => getGame(),
    },
  }),
});

现在如果有 viewer字段代表应用程序用户或网站查看者,用户是匿名还是登录完全取决于应用程序。如果用户需要登录,可以实现登录的mutation。您还可以限制对数据的访问。 Jonas Helfer发表了 excellent answer了解如何在服务器端完成用户访问检查。

关于graphql - Relay.js 中的查看器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37369414/

相关文章:

express - Apollo Server Express : Request entity too large

reactjs - 从 mutateAndGetPayload 返回 Promise

relayjs - 继电器连接错误

javascript - Knex 选择静态 "column"作为别名

mongodb - Graphql 为 Mongoose 聚合查询返回空 ID

php - 如何在灯塔 graphql laravel 中获取自定义指令参数

javascript - React Relay (react-relay) 与 Typescript 抛出 TypeError : Object prototype may only be an Object or null: undefined

relayjs - 在创建模型的 GraphQL/Relay 突变中,有没有办法取回模型 ID?

reactjs - this.props.relay.setVariables 触发获取后加载指示器?

mongodb - NestJS + Mongoose + GraphQL : "populate" not working