graphql-middleware 是一个 Node.js 的中间件集合,用于在 GraphQL 查询进出执行之前或之后可以对其进行中间件功能的扩展。本文将介绍如何使用 npm 包 graphql-middleware 进行 GraphQL 应用程序的中间件开发。
1. 安装
使用 npm 安装 graphql-middleware:
npm install graphql-middleware
2. 编写中间件
为了演示 graphql-middleware 的使用,我们将编写一个简单的 demo,实现对授权的身份验证。首先,编写授权中间件文件 authorize.js:
-- -------------------- ---- ------- ----- - -------------- - - ------------------------- ----- - ---- - - -------------------------- ----- --------------- - -------------------------------- ----- -------- -- - -- --------------- - ----- --- ------------------- ---------------- - ------ ----- --- -------------- - - ---------------- --展开代码
以上代码中,我们利用 graphql-shield 提供的 rule 函数创建了一个 GraphQL 中间件 isAuthenticated,用于判断是否已经登录。如果当前上下文 context 中没有 user 属性,则中间件会抛出 ForbiddenError 异常。
3. 使用中间件
接着,我们在 schema.js 中集成该中间件:
-- -------------------- ---- ------- ----- - --- - - ------------------------- ----- - --------------- - - ------------------------------ ----- - --------------- - - ----------------------- ----- -------- - ---- ---- ----- - --- ----- - ---- ---- - --- --- ----- ------- ------ ------- --------- ------- - -- ----- --------- - - ------ - --- -------- ----- -------- -- - ------ ------------- -- -- -- ----- ------ - ---------------- ---------------------- --------- ---------- --- ---------------- -- -------------- - -------展开代码
这里我们用 applyMiddleware 将 isAuthenticated 中间件添加到 schema 中。这样一来,在每次执行 Query 中 me 的时候,都会先经过 isAuthenticated 验证身份。
4. 运行示例
在示例中,我们使用 apollo-server 作为 GraphQL 服务器,在 index.js 中编写服务器代码:
-- -------------------- ---- ------- ----- - ------------ - - ------------------------- ----- ------ - -------------------- ----- ------ - --- -------------- ------- -------- -- --- -- -- - ----- ----- - ------------------------- -- --- ----- ---- - ------------------ -- ---------------- ------ - ---- -- -- --- ----------------------- --- -- -- - --------------- ------ ----- -- --------- ---展开代码
在如上代码中,我们添加了 context,用于在每次查询执行之前获取用户信息,并将其传递到 GraphQL 中。有关如何验证 token、获取用户信息并判断用户是否登录的详细示例,请参考:验证 token 并获取用户信息示例代码。
从终端上运行该 demo 应用程序:
node index.js
在浏览器中访问 http://localhost:4000 以查看 GraphQL Playground。在名为 HTTP HEADERS 的栏中添加 token 信息,例如:
{ "Authorization": "Bearer YOUR_TOKEN_HERE" }
接着,在 Query 栏中运行如下代码:
query { me { id name email } }
如果你的 token 是有效的,那么你会看到查询结果:
-- -------------------- ---- ------- - ------- - ----- - ----- ---- ------- ------- -------- ------------------ - - -展开代码
反之,如果 token 无效,则会返回错误:
-- -------------------- ---- ------- - ------- ----- --------- - - ---------- ---- --------------- ------------ - - ------- -- --------- - - -- ------- ------ - - -展开代码
5. 总结
在本文中,我们学习了如何使用 graphql-middleware npm 包,实现了一个检查用户是否已登录的授权中间件。graphql-middleware 让开发者能够在应用程序中以一种可复用、灵活的方式增强 GraphQL 查询逻辑,毫无疑问,这对于我们构建高质量的 GraphQL 应用程序是至关重要的。
除了身份验证外,graphql-middleware 还可用于请求速率限制、日志记录、缓存控制等。当你需要在 GraphQL 的每个请求之前或之后执行一些操作的时候,graphql-middleware 绝对是你的首选之一。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/195722