GraphQL一个简单的入门示例

准备

npm i --save express  express-graphql graphql cors

服务端代码

var express = require('express');var graphqlHTTP = require('express-graphql');const { buildSchema } = require('graphql');const cors = require('cors'); // 用来解决跨域问题// 创建 schema,需要注意到:// 1. 感叹号 ! 代表 not-null// 2. rollDice 接受参数const schema = buildSchema(`  type Query {    username: String    age: Int!  }`)const root = {    username: () => {        return '李华'    },    age: () => {        return Math.ceil(Math.random() * 100)    },}const app = express();app.use(cors());app.use('/graphql', graphqlHTTP({    schema: schema,    rootValue: root,    graphiql: true}))app.listen(3300);console.log('Running a GraphQL API server at http://localhost:3300/graphql')

客户端代码

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <meta http-equiv="X-UA-Compatible" content="ie=edge">    <title>graphql demo</title></head><body>    <button class="test">获取当前用户数据</button>    <p class="username"></p>    <p class="age"></p></body><script>    var test = document.querySelector('.test');    test.onclick = function () {        var username = document.querySelector('.username');        var age = document.querySelector('.age');        fetch('http://localhost:3300/graphql', {            headers: {                'Content-Type': 'application/json',                'Accept': 'application/json'            },            method: 'POST',            body: JSON.stringify({                query: `{                    username,                    age,            }`            }),            mode: 'cors' // no-cors, cors, *same-origin        })            .then(function (response) {                return response.json();            })            .then(function (res) {                console.log('返回结果', res);                username.innerHTML = `姓名:${res.data.username}`;                age.innerHTML = `年龄:${res.data.age}`            })            .catch(err => {                console.error('错误', err);            });    }</script></html>

运行结果