一、關於Apollo Server
Apollo Server是一種使用JS創建GraphQL服務端的一個方案。它的兼容性比較好,可以很好地和GraphQL客戶端進行兼容。同時它可以
- 獨立作為服務端進行
- 以插件的形式與現有的NodeJS 服務端程序進行兼容
- 可以作為一個GraphQL的數據網關。
官網地址:https://www.apollographql.com/docs/apollo-server/
二、搭建Apollo GraphQL Server
1) 和搭建Node Server類似。具體命令如下
npm init --yes
npm i apollo-server graphql
- apollo-server 是Apollo Server的核心庫
- graphql是用於構建GraphQL Schema和執行查詢的核心庫
2) 使用Babel配置ES6
npm i @babel/cli @babel/core @babel/node @babel/preset-env
3) 創建GraphQL Schema
- 創建graphtype
import { gql } from "apollo-server"; export default gql` type Book { title: String author: String } `;
- 創建query graphtype
import { gql } from "apollo-server"; export default gql` type Query { books: [Book] } `;
import bookTypes from "./book.types"; import queries from "./queries"; export default [bookTypes, queries];
- 創建resolver
import dataset from "../dataset"; // dataset即為數據源 const Query = { books: () => dataset.books, }; const resolvers = { Query, }; export default resolvers;
- 創建schema
import { makeExecutableSchema } from "apollo-server"; import typeDefs from "@graphtypes";// 這是配置了alias,引用的是graph type的導出,即export default [bookTypes, queries];
import resolvers from "@resolver";
export default makeExecutableSchema({ typeDefs, resolvers, });
3) 配置啟動腳本
import "module-alias/register"; import { ApolloServer } from "apollo-server"; import schema from "@schema"; import plugins from "@plugins"; const port = 8080; const server = new ApolloServer({ schema, plugins, formatError: (err) => { // 設置響應的錯誤信息進行格式化處理 return err.message; }, }); server.listen({ port }).then((serverInfo) => { console.log("===================================="); console.log(`Apollo GraphQL Server are listening at ${serverInfo.url}`); console.log("===================================="); });
三、配置package.json
"scripts": { "dev": "nodemon --exec babel-node index.js", "test": "echo \"Error: no test specified\" && exit 1" },
四、啟動和測試
運行命令:
npm run dev
項目會運行在http://localhost:8080
因為Apollo GraphQL Server將PlayGround整合進去了,所以可以直接使用playground進行調試
項目代碼可查看:
https://gitee.com/KingGang/apollo-graphql-server-management