• express.js graphql express-graphql


    文档

    创建应用

    const l = console.log;
    var express = require("express");
    var graphqlHTTP = require("express-graphql");
    var { buildSchema } = require("graphql");
    
    const cats = [{ id: 1, name: "a" }, { id: 2, name: "b" }, { id: 3, name: "c" }];
    
    var schema = buildSchema(`
      type Query {
    
        hello: String
    
        cats: [Cat]
    
        findCat(id: ID!): Cat
      }
    
      type Cat {
        id: Int
        name: String
      }
    `);
    
    // root 提供所有 API 入口端点相应的解析器函数
    var root = {
      hello: () => "Hello world 233!",
      cats: () => cats,
      findCat({id}) {
        return cats.find(el => el.id === Number(id));
      }
    };
    
    var app = express();
    
    // 根节点
    app.use(
      "/graphql",
      graphqlHTTP({
        schema: schema,
        rootValue: root,
        graphiql: true
      })
    );
    app.listen(4000);
    

    基本类型 String、Int、Float、Boolean 和 ID , String! 表示非空字符串,[Int] 表示一个整数列表

    查询

    http://localhost:4000/graphql?query={ cats { id name } }  // [Cat]
    
    http://localhost:4000/graphql?query={ findCat(id: 2){ name } }  // Cat.name
    
    http://localhost:4000/graphql?query={ hello } // Hello world 233!
    
    http://localhost:4000/graphql?query={ findCat(id: 2) {name} hello } // data:{ findCat:{ "name": "b" }, hello: "Hello world 233!" }
    
    let r = await axios.post("http://localhost:4000/graphql", {query: `{ findCat(id: ${id}) { name } hello}`});  // axios 
    

    增加数据 和 更新数据

      type Mutation {
        createCat(cat: CreateCat): [Cat]
        updateCat(id: ID!, name: String!): [Cat]
      }
    
      type Cat {
        id: Int
        name: String
      }
    
      input CreateCat {
        name: String!
      }
    
    var root = {
      createCat({ cat }) {
        cats.push({ id: cats.length + 1, name: cat.name });
        return cats;
      },
      updateCat({ id, name }) {
        cats.find(el => el.id == id).name = name;
        return cats;
      }
    };
    
    mutation {
      updateCat(id: 2, name: "new name") {
        name id
      }
    }
    
    mutation {
      createCat(cat:{name: "ajanuw"}) {
        name id
      }
    }
    
    // axios 实现 createCat
    const query = `mutation createCat($cat: CreateCat) {
      createCat(cat: $cat) {
        name
      }
    }`;
    async function main() {
      let r = await axios.post("http://localhost:4000/graphql", {
        query,
        variables: {
          cat: {
            name: 'hello'
          }
        }
      });
      l(r.data.data.createCat);
    }
    
    // updateCat
    const query = `mutation updateCat($id: ID!, $name: String!) {
      updateCat(id: $id, name: $name) {
        name
      }
    }`;
    async function main() {
      let r = await axios.post("http://localhost:4000/graphql", {
        query,
        variables: {
          id: 2,
          name: '233'
        }
      });
      l(r.data.data.updateCat);
    }
    

    获取req 对象

    var schema = buildSchema(`
      type Query {
        ip(msg: String): String
      }
    `);
    
    var root = {
      ip(args, req) {
        l(args);
        return req.ip;
      }
    };
    
    query={ ip(msg: "233") }
    
  • 相关阅读:
    代码整洁之道 读书笔记
    AJAX分页带页码
    下拉框绑定数据
    Excel导入导出
    万能分页存储过程
    android 更新uI主线程
    eclipse配置j2ee项目
    java常见错误云集与注意事项
    亚马逊服务器搭建
    常见sql的error解决方法
  • 原文地址:https://www.cnblogs.com/ajanuw/p/9859160.html
Copyright © 2020-2023  润新知