GraphQL 是一种新颖的数据查询语言,可以让前端应用程序向后端服务器发送更加精细化的查询请求,以获取更加精准和优化的数据响应。Node.js 是一个高效而强大的后端 JavaScript 框架,它可以与 GraphQL 搭配使用,为数据查询服务提供简单而可靠的解决方案。
在本教程中,我们将学习如何使用 Node.js 搭建 GraphQL 的后端服务,以及如何编写 GraphQL 查询的 API,并通过示例代码进行演示。
环境设置
在开始之前,我们需要确保 Node.js 和 npm 已经在您的计算机上安装好了。如果没有安装,您需要打开终端并执行以下命令:
$ sudo apt-get update $ sudo apt-get install nodejs $ sudo apt-get install npm
然后,我们将安装 express-graphql
和 graphql
两个 Node.js 模块。执行以下命令:
$ npm install express-graphql graphql --save
接下来,我们需要创建一个新的 Node.js 项目。在您的终端中执行以下命令:
$ mkdir node-graphql $ cd node-graphql $ npm init -y
然后,在 node-graphql
目录中创建一个新的 index.js
文件,并将以下代码复制进去:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ----------- - --------------------------- ----- - ----------- - - ------------------- -- -- ------- ------ ----- ------ - ------------- ---- ----- - ------ ------ - --- -- -- -------- -- ----- ---- - - ------ -- -- ------ ------- -- -- ---- ------- ----- ------- ------- ----- --- - ---------- ------------------- ------------- ------- ------- ---------- ----- --------- ----- ---- -- ---------- ---------------- -- -- ---------------- ------ -- --------------------------
这个示例代码定义了一个 GraphQL schema 和一个简单的 resolver 函数。在本例中,我们的 schema 只有一个名为 hello
的查询,它返回一个字符串“Hello World!”。resolver 函数简单地返回字符串本身。
在您的命令行终端中,输入以下命令,将服务器启动并在浏览器中访问查询 API:
$ node index.js
查询 Request
现在,我们的服务器已经运行起来了。通过在浏览器中访问 localhost:4000/graphql
,我们可以看到一个名为 GraphQL Playground 的页面。在这个页面的左侧有一个搜索框,可以让我们输入我们想要查询的数据。
输入以下查询:
{ hello }
然后按下“运行查询”按钮。您将会看到类似这样的结果:
{ "data": { "hello": "Hello World!" } }
现在,我们已经成功地从服务器上完成了我们的第一次 GraphQL 查询。
查询参数
除了查询简单的字符串之外,GraphQL 还支持查询参数。查询参数以变量的形式传递,并可以在定制化查询时使用。
让我们举一个示例,在我们的 schema 中添加一个名为 rollDice
的新查询,该查询将采用一个参数 diceCount
并生成 diceCount
个随机数字。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ----------- - --------------------------- ----- - ----------- - - ------------------- -- -- ------- ------ ----- ------ - ------------- ---- ----- - ------ ------- ----------------- ----- --------- ----- ----- - --- -- -- -------- -- ----- ---- - - ------ -- -- ------ -------- --------- -- -------- -------- -- -- - ----- ------ - --- --- ---- - - -- - - -------- ---- - ------------- - ------------------------ - --------- -- ----- - ------ ------- - -- -- ---- ------- ----- ------- ------- ----- --- - ---------- ------------------- ------------- ------- ------- ---------- ----- --------- ----- ---- -- ---------- ---------------- -- -- ---------------- ------ -- --------------------------
在这个代码中,我们添加了一个名为 rollDice
的新查询,并在 numDice
和 numSides
参数中传递。然后,resolver 函数使用整数数值生成随机数字,并返回一个数字数组。
现在,我们可以在 GraphQL Playground 中,输入以下查询:
query RollDice($dice: Int!) { rollDice(numDice: $dice, numSides: 6) }
我们还需要在下面的 Variables 栏中添加一个变量:
{ "dice": 3 }
按下“运行查询”按钮,您将获得类似以下结果:
-- -------------------- ---- ------- - ------- - ----------- - -- -- - - - -
现在,我们看到了如何使用 GraphQL 查询语句参数去定制化查询响应,并获得我们希望的结果。
Mutation
除了查询响应之外,GraphQL 还支持数据处理请求。这些称为 Mutation,它们允许我们更改查询数据并向后端服务器提交更改。
让我们修改我们的 schema,添加一个名为 setMessage
的 Mutation,它将采用一个字符串参数,将该字符串设置为“自定义消息”并返回“自定义消息已设置”的字符串响应。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ----------- - --------------------------- ----- - ----------- - - ------------------- -- -- ------- ------ ----- ------ - ------------- ---- ----- - ------ ------- ----------------- ----- --------- ----- ----- - ---- -------- - ------------------- -------- ------ - --- -- -- -------- -- ----- ------------ - --- ----- ---- - - ------ -- -- ------ -------- --------- -- -------- -------- -- -- - ----- ------ - --- --- ---- - - -- - - -------- ---- - ------------- - ------------------------ - --------- -- ----- - ------ ------- -- ----------- -- ------- -- -- - -------------------- - -------- ------ -------- --- -- ------------ - -- -- ---- ------- ----- ------- ------- ----- --- - ---------- ------------------- ------------- ------- ------- ---------- ----- --------- ----- ---- -- ---------- ---------------- -- -- ---------------- ------ -- --------------------------
在 resolver 函数中,我们定义了一个名为 fakeDatabase
的假数据库对象,并在 setMessage
方法中将其使用。其中,传递的 message
将会存储在 fakeDatabase
中,随后返回一个含有相应字符串的响应。
现在,我们可以在 GraphQL Playground 中输入以下 Mutation:
mutation SetMessage($message: String!) { setMessage(message: $message) }
我们的变量是:
{ "message": "Custom Message" }
按下“运行查询”按钮,您将会获得:
{ "data": { "setMessage": "Message set to Custom Message" } }
通过上述示例我们可以看到,Mutation 允许我们编写 GraphQL 程序来更改查询数据,提供客户端到服务器的双向通信。
结论
Node.js 和 GraphQL 在现代 Web 开发中发挥着越来越重要和重大的作用。在这个教程中,我们了解了如何将两者一起使用,使用我们的示例代码,您可以立即开始构建自己的 GraphQL 服务器。
希望本文对您有所帮助,谢谢!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6718a91fad1e889fe22d2cd0