prisma middleware 简化 graphql resolver 编写的类库
prisma 推出middleware 的目的就是保持resolver 的简洁
作用:
- 输入参数访问同一个resolver
- 决定resolver 最终的返回值
- 在resolver 连中捕获异常以及错误
基本项目
- 初始化项目
yarn init -y
- 添加依赖
yarn add graphql-yogo
- 测试代码
const { GraphQLServer } = require('graphql-yoga')
const typeDefs = `
type Query {
hello(name: String): String
bye(name: String): String
}
`
const resolvers = {
Query: {
hello: (root, args, context, info) => {
console.log(`3. resolver: hello`)
return `Hello ${args.name ? args.name : 'world'}!`
},
bye: (root, args, context, info) => {
console.log(`3. resolver: bye`)
return `Bye ${args.name ? args.name : 'world'}!`
},
}
}
const logInput = async (resolve, root, args, context, info) => {
console.log(`1. logInput: ${JSON.stringify(args)}`)
const result = await resolve(root, args, context, info)
console.log(`5. logInput`)
return result
}
const logResult = async (resolve, root, args, context, info) => {
console.log(`2. logResult`)
const result = await resolve(root, args, context, info)
console.log(`4. logResult: ${JSON.stringify(result)}`)
return result
}
const middlewares = [logInput, logResult]
const server = new GraphQLServer({
typeDefs,
resolvers,
middlewares,
})
server.start(() => console.log('Server is running on http://localhost:4000'))
运行&&测试
- 运行
node app
or
yarn start

- graphql playground

- 访问日志
请求内容
query {
hello(name:"dalong")
}
日志内容

处理流程
遵循的是洋葱原则,如下图,同时中间件数据的顺序比较重要,同时每个中间价包含一个before after 在实际的resolver 执行
的时候

特定query 的应用middleware
- 参考代码
const middleware1 = {
Query: {
hello: logInput,
bye: logInput
}
}
const middleware2 = {
Query: {
bye: logResult
}
}
const middlewares = [middleware1, middleware2]
const server = new GraphQLServer({
typeDefs,
resolvers,
middlewares,
})
与directive 的区别
中间价更灵活,同时更容易控制系统对于字段数据的处理,而指令更多的是字段、或者类似级别的,具体详细
的可以参考资料
参考资料
https://www.prisma.io/blog/graphql-middleware-zie3iphithxy/
prisma middleware 简化 graphql resolver 编写的类库的更多相关文章
- 编写Javascript类库(jQuery版
编写Javascript类库(jQuery版) - 进阶者系列 - 学习者系列文章 Posted on 2014-11-13 09:29 lzhdim 阅读(653) 评论(1) 编辑 收藏 本系列文 ...
- Csharp调用基于Opencv编写的类库文件
现在将Csharp调用基于Opencv编写的类库文件(Dll)的方法定下来,我取名叫做GreenOpenCsharpWarper,简称GOCW. 一.CLR编写的DLL部分 1.按照正常方法引入Ope ...
- hasura graphql-engine graphql2chartjs 方便的graphql 转换chartjs 的类库
graphql2chartjs 是hasura graphql-engine 团队开源的方便graphql 转换为chartjs 的类库,我们可以方便的 用来进行ChartJS chart 开发 一张 ...
- 编写Javascript类库(jQuery版) - 进阶者系列 - 学习者系列文章
这些年主要关注于项目管理方面的工作,编码就比较少了.这几天比较空闲,就想把原来的经验沉淀下来,一个是做好记录,以后如果忘记了还能尽快找回来,第二个是写写博文,算是练练手笔吧. 言归正传,这次写的是Ja ...
- 关于在VB.NET中调用使用VC++编写的类库dll的一点笔记
前言 结对作业要求一出来,我就立刻想到了把“计算核心”封装成dll,然后使用vb.net编写UI调用dll的思路.然而在实现过程中却遇到了很多的问题. 我在这个过程中是负责使用vb.net编写UI并调 ...
- 在 Vue 项目中(vue-cli2,vue-cli3)使用 pug 简化 HTML 的编写
使用 pug 的原因: 使得 HTML 写起了来更加清晰和快捷 用法: Vue 的用法没有变化: <template lang="pug"> transition(na ...
- 5款帮助简化的HTML5 Audio开发的Javascript类库
HTML5的audio标签提供了我们方便控制声音的功能,可是使用原生的HTML5来开发声音或者音乐相关的项目仍旧很的麻烦.在今天这篇文章中,我们将介绍5款帮助你简化开发的javascript audi ...
- 示例:WPF中自定义StoryBoarService在代码中封装StoryBoard、Animation用于简化动画编写
原文:示例:WPF中自定义StoryBoarService在代码中封装StoryBoard.Animation用于简化动画编写 一.目的:通过对StoryBoard和Animation的封装来简化动画 ...
- C#常用开源类库
一.AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种 ...
随机推荐
- Linux内核分析
通过分析汇编代码理解计算机是如何工作的 网易云课堂<Linux内核分析>作业 实验目的: 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 实验过程: 登陆实验楼虚拟机h ...
- ThinkPHP开发博客系统笔记之一
1.前后台搭建 开发的第一步是搭建前后台系统.搭建前台系统的时候新建了LoginController控制器和登录界面View/Login/index.tpl.模板文件中需要引入js和css文件,这里想 ...
- springboot logback + log4j2日志管理
springboot的web项目中自带了日志组件: 我们看一下,springboot中找到日志组件. <dependency> <groupId>org.springframe ...
- rspec-rails中的一些匹配器只有在特定的类型才能使用。
请求测试 ) expect(response).not_to have_http_status(:created) Model Specs描述模型的行为,一般基于数据库. Request Spec 主 ...
- PrestaShop 1.7 订单生成后下载服务器出现 505 的错误
PrestaShop 生成订单后下载,服务器上有 505 的错误. 经查看应该是服务器上的错误: Allowed memory size of 134217728 bytes exhausted (t ...
- 将Excel的数据更新至SqlServer
update P_Dic_Region set F_Long=a.F_Long,F_Lat=a.F_Lat from( select * from OPENDATASOURCE( 'Microsoft ...
- C# DataTable Compute方法的使用
在开发中需要对DataTable的数据进行处理,比如累加,求最大最小及平均值等,以前都采用手工对DataTable进行循环并计算的方式,现在发现DataTable的Compute方法可以轻松实现这些功 ...
- [转]PowerDesigner 把Comment写到name中 和把name写到Comment中 pd7以后版本可用
http://www.cnblogs.com/cxd4321/archive/2009/03/07/1405475.html 在使用PowerDesigner对数据库进行概念模型和物理模型设计时,一般 ...
- freemarker多个checkbox一个被选中示例
前端真的不难!!!!! 前端真的不难!!!!! 前端真的不难!!!!! 前端真的不难!!!!! 前端真的不难!!!!! 前端真的不难!!!!! 前端真的不难!!!!! 前端真的不难!!!!! 前端真的 ...
- HDU 4004 二分
The Frog's Games Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others) ...