前言
GraphQL 是一种由 Facebook 开源的数据查询和操作语言,可以帮助开发者更高效地构建 API。而 Fastify 是一个快速、低开销、可扩展的 Node.js Web 框架,它的设计目标是为了提供最佳的性能和开发体验。本文将介绍如何在 Fastify 中使用 GraphQL。
安装
首先,我们需要安装 Fastify 和相关的 GraphQL 插件。可以使用 npm 或 yarn 进行安装:
npm install fastify fastify-gql graphql # 或者 yarn add fastify fastify-gql graphql
创建 Fastify 应用
接下来,我们需要创建一个 Fastify 应用,并注册 fastify-gql
插件:
// javascriptcn.com code example const fastify = require('fastify')() const { graphqlFastify, graphiqlFastify } = require('fastify-gql') const { makeExecutableSchema } = require('@graphql-tools/schema') const typeDefs = ` type Query { hello: String } ` const resolvers = { Query: { hello: () => 'Hello GraphQL!' } } const schema = makeExecutableSchema({ typeDefs, resolvers }) fastify.register(graphqlFastify, { schema, path: '/graphql' }) fastify.register(graphiqlFastify, { endpointURL: '/graphql', path: '/graphiql' }) fastify.listen(3000, (err, address) => { if (err) { console.error(err) process.exit(1) } console.log(`Server listening on ${address}`) })
在上面的代码中,我们使用 makeExecutableSchema
函数创建了一个简单的 GraphQL schema,并将其作为参数传递给 graphqlFastify
插件。同时,我们也注册了 graphiqlFastify
插件,用于在浏览器中查看 GraphQL schema。
现在,我们可以启动 Fastify 应用,并在浏览器中访问 http://localhost:3000/graphiql
,查看 GraphQL schema。
查询数据
接下来,我们将添加一个新的查询,用于获取一个数字的平方。在 typeDefs
中添加以下内容:
type Query { hello: String square(number: Int!): Int }
在 resolvers
中添加以下内容:
const resolvers = { Query: { hello: () => 'Hello GraphQL!', square: (parent, { number }) => number * number } }
现在,我们可以在 GraphiQL 中尝试执行以下查询:
query { square(number: 5) }
执行结果应该是:
{ "data": { "square": 25 } }
修改数据
除了查询数据外,GraphQL 还支持修改数据。我们可以在 typeDefs
中添加一个 mutation,用于修改一个数字的值:
type Mutation { setNumber(number: Int!): Int }
在 resolvers
中添加以下内容:
// javascriptcn.com code example const resolvers = { Query: { hello: () => 'Hello GraphQL!', square: (parent, { number }) => number * number }, Mutation: { setNumber: (parent, { number }, context) => { context.number = number return number } } }
在上面的代码中,我们使用了 context
参数,它是一个对象,可以用于在不同的 resolver 之间共享数据。我们将 number
存储在 context
中,并在 resolver 中返回它。
现在,我们可以在 GraphiQL 中尝试执行以下 mutation:
mutation { setNumber(number: 10) }
执行结果应该是:
{ "data": { "setNumber": 10 } }
此时,context.number
的值应该是 10
。
结论
本文介绍了如何在 Fastify 中使用 GraphQL,包括查询数据和修改数据。使用 GraphQL 可以帮助我们更高效地构建 API,同时 Fastify 的高性能和开发体验也能为我们提供良好的支持。希望本文对你有所帮助!
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/672545162e7021665e179357