GraphQL 是一种用于 API 的查询语言,它提供了一种更高效、更强大、更灵活的方式来获取和修改数据。Hapi 是一个基于 Node.js 的 Web 框架,它提供了一些强大的工具和插件来帮助开发者快速构建 Web 应用程序。在本文中,我们将介绍如何使用 Hapi 框架搭建 GraphQL API。
安装 Hapi 和相关插件
首先,我们需要安装 Hapi 和相关插件。可以使用 npm 或者 yarn 来进行安装,具体命令如下:
npm install hapi @hapi/hapi @hapi/boom @hapi/joi @hapi/graphql
这里我们安装了 Hapi 框架本身以及一些常用的插件,包括 @hapi/boom、@hapi/joi 和 @hapi/graphql。@hapi/boom 是用于处理错误的插件,@hapi/joi 是用于数据验证的插件,@hapi/graphql 是用于构建 GraphQL API 的插件。
配置 Hapi 服务器
接下来,我们需要配置 Hapi 服务器。在 server.js 文件中,添加以下代码:
// www.javascriptcn.com code example
const Hapi = require('@hapi/hapi');
const Boom = require('@hapi/boom');
const Joi = require('@hapi/joi');
const { graphqlHapi } = require('@hapi/graphql');
const { makeExecutableSchema } = require('graphql-tools');
const typeDefs = `
type Query {
hello: String
}
`;
const resolvers = {
Query: {
hello: () => 'Hello, world!'
}
};
const schema = makeExecutableSchema({ typeDefs, resolvers });
const init = async () => {
const server = Hapi.server({
port: 3000,
host: 'localhost'
});
await server.register([
{
plugin: graphqlHapi,
options: {
path: '/graphql',
graphqlOptions: { schema },
route: { cors: true }
}
}
]);
server.route({
method: 'GET',
path: '/',
handler: (request, h) => {
return 'Hello, Hapi!';
}
});
await server.start();
console.log(`Server running at: ${server.info.uri}`);
};
process.on('unhandledRejection', (err) => {
console.log(err);
process.exit(1);
});
init();上面的代码定义了一个简单的 GraphQL API,它只有一个查询字段 hello,返回字符串 Hello, world!。我们使用 makeExecutableSchema 函数将类型定义和解析器合并为一个 GraphQL schema。
使用 Hapi.server 函数创建了一个名为 server 的 Hapi 服务器,将其监听在本地的 3000 端口。我们注册了 graphqlHapi 插件,并将其配置在 /graphql 路径上。graphqlOptions 选项指定了我们定义的 GraphQL schema。route 选项启用了跨域资源共享(CORS)。
我们还定义了一个简单的路由,用于测试 Hapi 服务器是否正常运行。
测试 GraphQL API
现在,我们可以启动 Hapi 服务器,并测试 GraphQL API 是否正常工作。在终端中运行以下命令:
node server.js
如果一切正常,你应该能够看到类似如下的输出:
Server running at: http://localhost:3000
现在,我们可以使用 GraphiQL 工具来测试 GraphQL API。在浏览器中打开 http://localhost:3000/graphql,你应该能够看到 GraphiQL 的界面。在左侧的查询编辑器中输入以下查询:
query {
hello
}点击运行按钮,你应该能够看到类似如下的响应:
{
"data": {
"hello": "Hello, world!"
}
}至此,我们已经成功地使用 Hapi 框架搭建了一个简单的 GraphQL API。你可以根据自己的需求,添加更多的类型定义和解析器,构建更加复杂的 API。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d3f66ea941bf7134782bec