Resolvers:负责获取schema中字段数据的函数。
const express = require('express'); const { ApolloServer, gql } = require('apollo-server-express'); const typeDefs = gql` type Query { hello: String } `; const resolvers = { Query: { hello: () => 'Hello world!', }, }; const server = new ApolloServer({ typeDefs, resolvers }); const app = express(); server.applyMiddleware({ app }); app.listen({ port: 4000 }, () => console.log(`Server ready at http://localhost:4000${server.graphqlPath}`) );第二步:将REST端点迁移到GraphQL
// GraphQL Schema const typeDefs = gql` type User { id: ID! name: String! email: String! } type Query { user(id: ID!): User } `; // 堆代码 duidaima.com // Resolver const resolvers = { Query: { user: async (_, { id }) => { const response = await fetch(`http://api.example.com/users/${id}`); return response.json(); }, }, };第三步:在React中集成Apollo Client
import { ApolloClient, InMemoryCache, ApolloProvider } from '@apollo/client'; const client = new ApolloClient({ uri: 'http://localhost:4000/graphql', cache: new InMemoryCache(), }); ReactDOM.render( <ApolloProvider client={client}> <App /> </ApolloProvider>, document.getElementById('root') );第四步:使用GraphQL查询数据
import { gql, useQuery } from '@apollo/client'; const GET_USER = gql` query GetUser($id: ID!) { user(id: $id) { id name email } } `; function UserProfile({ userId }) { const { loading, error, data } = useQuery(GET_USER, { variables: { id: userId }, }); if (loading) return <p>Loading...</p>; if (error) return <p>Error :(</p>; return ( <div> <h2>{data.user.name}</h2> <p>{data.user.email}</p> </div> ); }步骤 5:增量迁移