【问题标题】:Argument in revolve of GraphQLGraphQL 中的参数
【发布时间】:2019-05-09 18:29:44
【问题描述】:

我正在学习 GraphQL,特别是,我正在学习 stephen Grinder 的 udemy 课程。

在他的视频中,他在 revolve 中使用了 3rd Argument

resolve(parent, args, request) {

request 对象包含详细信息,例如他们尝试的路线 访问、查询字符串和正文等(用于身份验证)

我发现有些模糊的解释

所以我用谷歌搜索并从 graphQL 页面阅读了这篇文章

这个例子是用 JavaScript 编写的,但是 GraphQL 服务器也可以 用许多不同的语言构建。解析器函数接收四个 论据:

obj 上一个对象,对于根查询类型上的字段是 经常不使用。

args 提供给字段中的参数 GraphQL 查询。

context 提供给每个解析器的值,并且 保存重要的上下文信息,例如当前登录的 用户,或访问数据库。

info 保存字段特定的值 与当前查询以及架构相关的信息 详细信息,请参阅类型 GraphQLResolveInfo 了解更多详细信息。

现在,我无法理解我们什么时候需要使用上下文/请求?由于它用于突变,我感觉它会将信息从 graphQL 传递到我的护照快递(因为我们在该路线中的实际意图是从前端获取输入并将其传递给本地护照策略)

但根据定义,它似乎被用于将信息从 express 传递到 graphQL

此外,由于我偶然发现了 graphQl 文档,我还看到了一些我再次无法理解的信息。

那么有人可以解释一下 graphQL 中的上下文和信息吗?

【问题讨论】:

    标签: node.js graphql


    【解决方案1】:

    您基本上可以将任何您想要的数据发送给解析器。

    我验证令牌并将我的用户添加到请求中,然后将我的用户传递到上下文中,如下所示。

    const server  = new ApolloServer({schema: schema(), context: ({req}) => ({context: 
    req.user})});
    

    然后,我的一次性用品中就有了所有可用的用户数据:

     saveChat: async (root, {chat}, {context, pubsub}) => {
      const user = context || null;
      chat.author = user._id ? user._id : null;
      return new ChatModel({...chat}).save();
    },
    

    我也在测试一些 pubsub 的东西并通过上下文发送它。

    在使用graphql指令确定角色和权限时也很方便:

    hasRole(next, src, {roles}, {context}) {
     if (!context) { throw new Error('Must be Authenticated at least.'); }
     let valid  = false;
     roles.forEach((role) => { valid = !valid ? _.includes(context.roles, role) : 
     valid; });
     return valid ? next() : new Error(`Missing correct role to perform this task, you 
     have roles: ${context.roles}`);
    },
    

    在 Graphql 中:

     directive @hasRole(roles: [String]) on FIELD_DEFINITION
    
     saveChat(chat: ChatSaveInput!): Chat @hasRole(roles: ["admin"])
    

    这大致基于 Ryan Chenkie 的文章,他对 & graphql 做了一些,值得一看。

    【讨论】:

    • 瑞恩,感谢您的回答。看来您恰好是经验开发人员,因此您的回答似乎有点技术性。你能解释一下resolve取四个参数resolve(parent, args, context, info)
    • 我能期待什么context(在控制台中执行 console.log 给了我疯狂的东西)它来自哪里?比如是在上下文中快速发送数据还是客户端?
    • 这可能是您查看 Varun 的请求,
    猜你喜欢
    • 2021-11-02
    • 2022-01-18
    • 2021-12-05
    • 1970-01-01
    • 2017-11-14
    • 2019-03-08
    • 2018-10-21
    • 2021-11-05
    • 2018-08-30
    相关资源
    最近更新 更多