zoukankan      html  css  js  c++  java
  • koa-graphql express-graphql 中如何 定义每一个字段resolver执行函数

      第一种方式:  首先来看一下,官方给出的koa-graphql的例子,

    ```js

    var express = require('express');
    var {graphqlHTTP} = require('express-graphql');
    var { buildSchema } = require('graphql');
    var fs = require('fs');
    const { resolve } = require('path');
    var schema = buildSchema(`
      type Query {
        hello: String
        world: String
      }
    `);
    const getdata = () =>{
      return new Promise(resolve =>{
        setTimeout(() => {
          resolve('OK11')
        }, 500);
      })
    }
    var root = {
         hello: (ctx) => ctx ,
         world:async () => {
           return await getdata() ;
         }
        };

    var app = express();
    app.use('/graphql', function(req,res, next) {
        console.log(req.query);
        next();
    }, graphqlHTTP({
      schema: schema, //查询结构体
      rootValue: root,  // 返回结果
    }));
    ```js
    原来官方的例子中用的是hello ,通过在rootValue中传入一个对象,对象中各个字段为属性,函数为属性值,返回一个数据结果。
    支持异步结果。比如,数据库查询,RPC调用等等。
     
        第二种方式: 通过读取.gql 后缀文件,通过graphql库中的buildSchema方法,传入fs读取后的文件。如下:
      const schema = buildSchema(fs.readFileSync(__dirname + '/schema/comment.gql', 'utf-8'));
      通过schema.getQueryType().getFields().comment.resolve  来定义字段的resolve函数  其中comment是字段  ---------------出自杨浩老师,在极客时间中node课程
      该函数范围一个Promise即可。
       第三种方式: 使用graphql-tools包,分别定义resolver 和 gql 结构,就能用该包的自带方法  makeExecutableSchema,将二者结合。最后挂载到koa或者express的路由     上。但是这种方式要注意resovler的写法,如下列子。定义的数据结构是
    type Post {
      id: ID!
      title: String
      author: Author
      votes: Int
    }
    type Query {
      posts: [Post]
    }

    那么对应的resolve函数应该用一下写法。
    const resolver = {
      Query:{
        post(){
          return posts
    }
    }
    }
    所有查询字段,都在Query这个对象中,定义方法。
    以上就是我整理的3种在koa-graphql , express-graphql 中定义 查询字段结果的resolver函数的方法。仅供大家参考。
        
  • 相关阅读:
    React 进修之路(1)
    requireJS的配置心得
    DOM的内部插入和外部插入
    h5移动端设备像素比dpr介绍
    原生js--事件类型
    React 进修之路(3)
    javaScript
    html&css
    MyBatis
    Maven基础
  • 原文地址:https://www.cnblogs.com/yaya666/p/13564309.html
Copyright © 2011-2022 走看看