介绍
@koba789/express-graphql 是一个基于 Express 的 GraphQL 中间件,用于构建高效的 GraphQL API。
这个包基于 express-graphql,但是添加了很多功能和高度抽象的特性。它是一个非常强大的工具,特别是当你想要在使用 GraphQL 的同时也能够享受到 Express 的极大灵活性时。
在这篇文章中,我们将详细介绍如何使用 @koba789/express-graphql,让你轻松地开始构建自己的 GraphQL API。同时,我们还将分享其中一些有用的功能和技巧。
安装
安装 @koba789/express-graphql 的最简方式就是在终端执行以下命令:
npm install @koba789/express-graphql
使用
让我们来看一下如何使用 @koba789/express-graphql,我们需要创建一个 GraphQLSchema,这样我们就可以在服务器上查询数据。
你可以创建自己的 GraphQLSchema,也可以使用一些现成的,如 GraphCMS。下面是基于一个 GraphQLSchema 的示例:
-- -------------------- ---- ------- ----- - ------------------ -------------- ------------- - - ------------------- ----- -------- - --- ------------------- ----- ------- ------- - --- - ----- ------------- -- ----- - ----- ------------- -- ------ - ----- ------------- -- -- --- ----- --------- - --- ------------------- ----- ---------------- ------- - ----- - ----- --------- ----- - --- - ----- ------------- - -- -------------------- ----- -------- - -- -------------- -- -- -- --- -------------- - --- --------------- ------ ---------- ---
接下来,我们需要使用 @koba789/express-graphql,它的用法类似于 Express 中的路由:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ----------- - ------------------------------------ ----- ------ - -------------------- ----- --- - ---------- ----- ---- - ----- -------- ----------- ------------- ------- --------- ----- --- -- ---------------- -- -- - ---------------- --------- -- --------------------------- ---
现在我们可以在 http://localhost:3000/graphql 访问 GraphiQL 页面,这是一个带有自动完成功能和实时查询功能的 IDE,可以方便地进行查询、测试和调试。
高级用法
数据库连接
使用 GraphQL 的主要目标之一是获取和更新你的后端数据。所以常常需要与数据库进行连接。在使用 @koba789/express-graphql 时,你可以在 context
对象中传入一个数据库连接,以便在 GraphQL 解析器中使用。
在之前的查询示例中,我们传入了 context
对象,但我们还需要在上下文中传入数据库连接:
-- -------------------- ---- ------- -- ------- ----- -------- - -------------------- ---------------------------------------------------- -- --- ------- -------- -------- ----------- ----------------- ---- ---- -- -- ------- --------- ----- -------- - --- ----------------------- -- ---- --
然后,你可以在你的 GraphQL 解析器中使用这个数据库连接:
-- -------------------- ---- ------- -- ------- --------- ------------ ----- --------- - --- ------------------- ----- ---------------- ------- - ----- - ----- --------- ----- - --- - ----- ------------- - -- ----- -------------------- - -- -- - -- -- - ------ -------------------------------- ---- -- --- -- -- -- ---
认证
GraphQL 中的认证是一个非常广泛和复杂的话题。但基本的想法是,你将通过某种方式获取到一个凭证,再将这个凭证传递给后端,用于验证该请求是否有权访问受保护的数据。
有许多不同的方式可以实现此目的。在这里,我们将介绍一个使用 JWT (JSON Web Token) 做认证的示例。
首先,你需要安装 npm 包 jsonwebtoken
:
npm install jsonwebtoken
然后,你需要在你的 ExpressJS 应用程序中实现一个验证函数,用于从 HTTP 请求中提取 JWT 并验证它的有效性:
-- -------------------- ---- ------- ----- --- - ------------------------ -------- ------------------ - ----- ----- - ----------------------------- -- -------- ------ ----- --- - ----- ------- - ----------------- ------------ ------ -------- - ----- --- - ------ ----- - -
最后,将验证函数添加到上下文中:
-- -------------------- ---- ------- -------- ----------- ----------------- ---- ---- -- -- ------- --------- ----- -------- - --- ----------------------- ----- ------------------ -- ---- --
然后,在你的 GraphQL 解析器中,你可以根据请求者是否认证来确定他是否有权访问保护的数据:
-- -------------------- ---- ------- ----- --------- - --- ------------------- ----- ---------------- ------- - ----- - ----- --------- ----- - --- - ----- ------------- - -- ----- -------------------- - -- -- - --- ---- -- - -- ------- - ----- --- ------------- - -- ------------ ---- -- -- -- -- ---
文件上传
在许多应用程序中,可能需要上传文件。而 @koba789/express-graphql 为此提供了很棒的支持。
首先,你需要安装 npm 包 graphql-upload
:
npm install graphql-upload
然后,在你的 ExpressJS 应用程序中处理文件:
-- -------------------- ---- ------- ----- - ------------- --- - - --------------------------------- ----- - -------------------- - - -------------------------- ----- --- - ---------- ----- -------- - ---- ------ ------ ---- -------- - ---------------- --------- ------ - -- ----- --------- - - --------- - ----------- ----- -------- - ---- -- -- - ----- - ----------------- --------- -------- - - ----- ----- ----- ------ - ------------------- -- ------------- ------ --------- -- - -- ----- ------ - --- -------------- --------- ---------- -------- -- --- -- -- - ------ - ------------ ---------------------------------------------------------- -- -- --- ------------------- ----------------------- ------------------------ ---------------- -- -- ------------------- ------- -- -------------------------
然后,你就可以在 GraphiQL 中上传文件了:
mutation { uploadFile(file: *file here*) }
结论
@koba789/express-graphql 是一个非常强大的工具,可以让你更加高效地构建 GraphQL API。在这篇文章中,我们介绍了如何使用 @koba789/express-graphql,以及如何利用其高级功能,如数据库连接、认证和文件上传。
我们希望这篇文章对你有帮助,并能够开始手动构建自己的 GraphQL API。如果你有任何问题或疑惑,请在评论中留言,我们会尽力为你解答。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60066bc7967216659e2444e9