GraphQL 是一种新兴的 API 查询语言,它能够将客户端的查询需求映射到服务端的具体数据源上,从而大大提高了 API 查询的效率和灵活性。在前端领域中,Hapi.js 是一款非常流行的 Web 应用框架,它提供了一系列的插件和工具,可以让我们快速地实现 GraphQL 服务。本文将介绍如何在 Hapi.js 中实现 GraphQL,帮助读者快速掌握 GraphQL 的使用。
Hapi.js 的安装与配置
在开始之前,我们需要先安装好 Hapi.js 和相关的工具。使用 npm 可以轻松地安装 Hapi.js:
npm install hapi
接着,我们需要安装其他一些必须的插件,包括 graphql、graphql-tools、hapi-graphql:
npm install graphql graphql-tools hapi-graphql
安装完成后,我们需要配置好 Hapi.js 的启动文件。在我们的案例中,我们将使用 index.js 作为启动文件。在此文件中,我们需要引入 Hapi.js 和相关的插件以及数据源,配置好 GraphQL 的路由和处理函数。具体的代码如下:
// www.javascriptcn.com code example
const Hapi = require('hapi')
const { graphqlHapi, graphiqlHapi } = require('apollo-server-hapi')
const { makeExecutableSchema } = require('graphql-tools')
// 定义 GraphQL schema
const typeDefs = `
type Query {
hello: String
}
`
// 定义具体的查询操作
const resolvers = {
Query: {
hello: () => 'Hello from GraphQL!'
}
}
// 根据 schema 和 resolvers 创建可执行的 GraphQL schema
const schema = makeExecutableSchema({ typeDefs, resolvers })
// 创建 Hapi 服务
const server = Hapi.server({
port: 4000,
host: 'localhost'
})
async function init () {
// 添加 GraphQL API 路由
await server.register({
plugin: graphqlHapi,
options: {
path: '/graphql',
graphqlOptions: { schema },
route: { cors: true }
}
})
// 添加 GraphiQL 路由
await server.register({
plugin: graphiqlHapi,
options: {
path: '/graphiql',
graphiqlOptions: { endpointURL: '/graphql' }
}
})
// 启动 Hapi 服务
await server.start()
console.log(`Server running at ${server.info.uri}`)
}
init()在这份代码中,我们首先定义了 GraphQL schema,并根据 schema 和 resolvers 创建了可执行的 schema。接着,创建了 Hapi 服务,并添加了两个路由,分别是 GraphQL API 和 GraphiQL。其中,GraphQL API 的 path 是 /graphql,通过 graphqlOptions 配置 GraphQL schema,同时开启了跨域请求 cors。而 GraphiQL 的 path 是 /graphiql, endpointURL 则指向了 GraphQL API 的地址。最后,通过调用 server.start() 启动 Hapi 服务。
编写 GraphQL 查询
有了上面的配置,我们可以通过访问 http://localhost:4000/graphiql 来测试 GraphQL 查询了。在 GraphiQL 的交互式界面中,我们可以输入以下查询语句:
query {
hello
}这个查询语句就是调用了刚刚我们在 schema 中定义的 hello 查询操作,它会返回一个字符串 "Hello from GraphQL!"。图中是返回的结果:

结语
经过本文的介绍,相信读者已经了解了如何在 Hapi.js 中实现 GraphQL,以及如何编写和调试 GraphQL 查询操作。当然,GraphQL 还有很多更加高级和复杂的操作,我们只是简单地介绍了它的基本用法。更多有关 GraphQL 的学习资料,可以参见官方文档:https://graphql.org/。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67cfe55ae46428fe9ec295ec