介绍
graphql-start
是一个用于快速搭建 GraphQL 服务的 npm 包。它封装了一个可扩展的 GraphQL 服务框架,并且提供了命令行工具,方便我们快速初始化项目,并自由定制我们的 GraphQL 服务。本文将为大家介绍如何使用 graphql-start
来搭建自己的 GraphQL 服务。
安装
全局安装 graphql-start
:
npm install -g graphql-start
初始化项目
使用 graphql-start
命令创建项目:
graphql-start init [project-name]
比如:
graphql-start init my-graphql-app
这个命令会创建一个名为 my-graphql-app
的目录,里面的内容是一个初始的 GraphQL 服务应用程序。打开 my-graphql-app
目录:
cd my-graphql-app
我们看到一些目录和文件:
-- -------------------- ---- ------- - --- ------------ --- ----------------- --- ------------ --- --- --- -------- --- ------------ --- --------- --- --------
其中:
node_modules
:存放项目依赖的第三方包。package-lock.json
:锁定依赖包的版本,以便重复安装。package.json
:包含项目的描述信息和依赖。src
:存放源代码。
其中,index.js
是应用程序的启动文件,resolvers.js
包含了我们的 GraphQL 查询和修改的逻辑,schema.js
包含了我们的 GraphQL 类型和权限规则,utils.js
是一些公共方法。我们接下来会对这些文件进行说明。
编写 GraphQL 请求
打开 resolvers.js
文件,在里面编写 GraphQL 查询和修改(也叫 mutation)的逻辑。比如,编写一个查询学生的方法 student
,在学生数据库中查找对应的学生:
const resolvers = { Query: { student: (root, { id }, { dataSources }) => { return dataSources.studentAPI.getStudent(id); }, }, };
这段代码定义了一个 student
方法,它接收一个 id
参数,然后调用 studentAPI.getStudent(id)
方法来查找学生。dataSources
参数是一个包含了所有数据源的对象,我们通过该对象来访问学生数据库。我们后面会说明如何设置数据源。
定义 GraphQL 类型
打开 schema.js
文件,在里面定义 GraphQL 类型和权限规则。比如,定义一个学生类型,它有 id
、name
和 score
三个字段:
-- -------------------- ---- ------- ----- -------- - ---- ---- ------- - --- ------- ----- ------- ------ --- - ---- ----- - ----------- --------- -------- - --
这段代码用 GraphQL Schema Language 定义了一个 Student
类型,它有三个字段,分别是 id
、name
和 score
。Query
类型是 GraphQL 中的一种特殊类型,它定义了可查询的字段。我们在其中定义了一个 student
字段,它接收 id
参数,返回 Student
类型的学生对象。
添加数据源
graphql-start
自带了一些数据源实现,比如 REST 数据源、MongoDB 数据源、PostgreSQL 数据源等。我们可以选择其中一种或多种数据源来实现我们的数据获取逻辑。
以 MongoDB 数据源为例,我们需要首先安装 mongodb
和 graphql-datasource-mongodb
两个 npm 包:
npm install --save mongodb graphql-datasource-mongodb
然后,在 utils.js
文件中,添加 MongoDB 数据源:
-- -------------------- ---- ------- ----- - --------------- - - -------------------------------------- ----- ---------- ------- --------------- - ----- -------------- - -- ---- ----- ------- - ----- --------------------- -- ---------- - ----- --- ---------- -- - ----- ------ - ------ -------- - - -------------- - - ----------- --
这段代码定义了 StudentAPI
类,它继承自 MongoDataSource
类。然后,定义了 getStudent
方法,该方法使用 this.findOneById(id)
来查找指定 id
的学生。findOneById
方法是 MongoDataSource
类的方法,它实现了从 MongoDB 中查询数据的逻辑。
最后,我们导出 StudentAPI
类,以便在 resolvers.js
中使用数据源:
-- -------------------- ---- ------- ----- - ---------- - - ------------------- ----- ------ - --- -------------- --------- ---------- ------------ -- -- -- ----------- --- ------------- --- ---
我们在 ApolloServer
的 dataSources()
方法中创建了一个 StudentAPI
实例,将其赋值给 studentAPI
属性。这样,在 resolvers.js
中,我们就可以通过 dataSources.studentAPI
来访问学生 API,并调用 getStudent
方法查询学生。
启动应用程序
编写完整的代码后,我们就可以启动应用程序了。在项目根目录下执行以下命令:
npm start
这个命令会在 http://localhost:4000/
启动一个 GraphQL 服务,我们可以在 GraphQL Playground 中进行查询、修改等操作。
示例代码
下面是完整的示例代码,可以放在 resolvers.js
文件中:
-- -------------------- ---- ------- ----- - ---------- - - ------------------- ----- --------- - - ------ - -------- ------ - -- -- - ----------- -- -- - ------ -------------------------------------- -- -- -- ----- -------- - ---- ---- ------- - --- ------- ----- ------- ------ --- - ---- ----- - ----------- --------- -------- - -- ----- ------ - --- -------------- --------- ---------- ------------ -- -- -- ----------- --- ------------- --- --- ----------------------- --- -- -- - --------------- ------ ----- -- --------- ---
下面是完整的示例代码,可以放在 schema.js
文件中:
-- -------------------- ---- ------- ----- -------- - ---- ---- ------- - --- ------- ----- ------- ------ --- - ---- ----- - ----------- --------- -------- - --
结束语
本文为大家介绍了 graphql-start
的使用方法,包括初始化项目、编写 GraphQL 查询和修改、定义 GraphQL 类型和权限规则、添加数据源和启动应用程序等。我们还对每个步骤进行了详细的说明,并给出了示例代码。希望能帮助大家快速上手 GraphQL 开发。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60055ff481e8991b448ddbf2