首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Express GraphQL中的两个解析器函数之间共享数据?

在Express GraphQL中,可以通过使用上下文对象来在两个解析器函数之间共享数据。上下文对象是一个包含请求相关信息的JavaScript对象,可以在GraphQL服务器的每个请求中传递。

要在两个解析器函数之间共享数据,可以按照以下步骤进行操作:

  1. 在GraphQL服务器的配置中创建一个上下文对象,并将其传递给GraphQL中间件。例如,在Express中,可以使用express-graphql中间件来处理GraphQL请求,并在配置中传递上下文对象。
代码语言:txt
复制
const { graphqlHTTP } = require('express-graphql');
const { buildSchema } = require('graphql');

// 创建上下文对象
const context = {
  sharedData: '这是共享的数据',
};

// 配置GraphQL中间件并传递上下文对象
app.use('/graphql', graphqlHTTP({
  schema: buildSchema(schema),
  rootValue: root,
  context: context,
}));
  1. 在解析器函数中访问上下文对象,并从中获取共享的数据。在GraphQL解析器函数中,第三个参数是上下文对象,可以通过解构赋值的方式获取它。
代码语言:txt
复制
const root = {
  resolver1: (args, context) => {
    // 获取共享的数据
    const sharedData = context.sharedData;
    // 执行解析器函数的逻辑
    // ...
  },
  resolver2: (args, context) => {
    // 获取共享的数据
    const sharedData = context.sharedData;
    // 执行解析器函数的逻辑
    // ...
  },
};

通过上述步骤,你可以在Express GraphQL中的两个解析器函数之间共享数据。上下文对象可以存储任何类型的数据,包括对象、数组、函数等。

对于Express GraphQL中的两个解析器函数之间共享数据的实际应用场景,可以根据具体需求进行设计。例如,可以在第一个解析器函数中获取某个资源的数据,并将其存储在上下文对象中,然后在第二个解析器函数中使用该数据进行进一步处理或返回给客户端。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云官网:https://cloud.tencent.com/
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 人工智能平台(AI Lab):https://cloud.tencent.com/product/ai
  • 腾讯云物联网平台:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发平台:https://cloud.tencent.com/product/mpp
  • 对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云区块链服务:https://cloud.tencent.com/product/tbaas
  • 腾讯云元宇宙解决方案:https://cloud.tencent.com/solution/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

GraphQL 初体验,Node.js 构建 GraphQL API 指南

另一部分涉及实际获取数据,这是通过使用解析器完成解析器是一个返回字段基础值函数。 让我们看一下如何在 Node.js 实现解析器。...GraphQL 解析器相当于一个 Object,key 是要检索字段名,value 是返回数据函数。...} } } 这个解析器需要两个参数:一个代表父对象(在最初根查询,这个对象通常是未使用),一个包含传递给你字段参数 JSON 对象。...只需要 Schema 表达几行清晰代码,就可以在客户端和服务端之间建立强类型契约,这样可以防止你服务接受虚假数据,并向请求着清晰地表明错误。...,只是为了检索两个不同列,会导致两个数据库查询来获取 ID 为 1 User。

8.3K40

与我一起学习微服务架构设计模式8—外部API模式

它可以由三部分组成: GraphQL模式:定义服务器端数据模型及其支持查询 解析器函数:解析函数将模式元素映射到各种后端服务。 代理类:代理类调用应用程序服务。...简单情况下,查询文档包含查询名称,参数值及要返回结果对象字段。 把模式连接到数据源 当GraphQL服务器执行查询时,必须从一个或多个数据存储检索所请求数据。...通过将解析函数附加到模式定义对象类型字段,可以将GraphQL模式与数据源相关联。GraphQL通过调用解析器函数检索数据,以此实现API组合模式。...GraphQL通过递归调用Query文档中指定字段解析器函数来执行查询。首先,它执行查询解析器,然后递归调用结果对象层次结构字段解析器。...缓存会利用先前获取同一对象结果,以避免不必要重复调用。 为了让客户端调用GraphQL,你需要将它与Web框架集成,Express Web

1.3K30

一种不错 BFF Microservice GraphQLREST API 层开发方式

客户端 API 当我们构建基于 GraphQL 服务器时,可能需要从其他下游基于 GraphQL API 服务器获取数据。...Mocks 作为 TDD 一部分,我们可能需要模拟 graphql 响应,直到我们能够实现解析器为止 该基础结构设置为仅为当前未实现解析器添加模拟。...因此,一旦实现可用,实际解析器就会接手。同样,如果解析器执行失败,那么这将落在模拟响应上。此功能只能在开发期间使用,因此已添加检查以禁用“生产”版本此功能。...当前添加了一个使用 @date 指令示例( graphql-tools 文档中所述) Query ({ today(format: "mmm-dd-yy") }) - 这里格式基于@date scheme...此处区别在于,我们使用 @auth 指令根据角色来处理身份验证,而不是对解析程序实现进行硬编码。这是更清蒸方法,并且与解析器分离。

2.3K10

GraphQL】225-GraphQL真香入门教程

GraphQL 对你 API 数据提供了一套易于理解完整描述,使得客户端能够准确地获得它需要数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大开发者工具。...特点 请求你所要数据,不多不少; : hero 中有 name, age, sex 等,可以只取得需要字段。...客户端 这一节我们学习如何在客户端访问 graphql 接口。...在 express ,可以很简单使用中间件来将请求进行拦截,将没有权限请求过滤并返回错误提示。 中间件实际上是一个函数,在接口执行之前,先拦截请求,再决定我们是否接着往下走,还是返回错误提示。...就是这里要学习使用构造函数 graphql.GraphQLObjectType 定义,它有这么几个优点和缺点: 优点:报错提醒更直观,结构更清晰,更便于维护。 缺点:代码量上升。 1.

8.1K21

GraphQL真香入门教程

GraphQL 对你 API 数据提供了一套易于理解完整描述,使得客户端能够准确地获得它需要数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大开发者工具。...特点 请求你所要数据,不多不少; : hero 中有 name, age, sex 等,可以只取得需要字段。...客户端 这一节我们学习如何在客户端访问 graphql 接口。...在 express ,可以很简单使用中间件来将请求进行拦截,将没有权限请求过滤并返回错误提示。 中间件实际上是一个函数,在接口执行之前,先拦截请求,再决定我们是否接着往下走,还是返回错误提示。...就是这里要学习使用构造函数 graphql.GraphQLObjectType 定义,它有这么几个优点和缺点: 优点:报错提醒更直观,结构更清晰,更便于维护。 缺点:代码量上升。 1.

7.1K30

【译】如何在 Node.js 创建安全 GraphQL API

原文地址:How to Create a Secure Node.js GraphQL API 作者:Marcos 本文目的是提供一份快速指南 -- 《如何快速在如何在 Node.js 创建安全...简而言之,它基于两部分: GraphQL Queries(查询):允许客户端进行读取和操作,并可以指定数据接收格式 GraphQL Mutations(变更):向服务端写入数据,可以约定数据写入方式...所以当两者通过 API 形式来进行通信时,其他项目也可以使用同样方式来工作。 如果你在一个大团队工作,可以将它拆分成前端和后端两个团队,这样他们就可以使用相同技术栈来工作从而提高效率。...本文所有示例可以在这个链接获得:https://github.com/makinhs/node-graphql-tutorial 我们将会处理两种类型资源(两个集合): Users:用来展示如何进行基本...(查询):我们要从服务器获取内容 Mutations(变更):请求将会改变服务器数据 现在,我们重新执行一下 npm start,我们可以看到在控制台中显示了以下消息:Node Graphql API

2.5K20

Salesforce 构建可扩展 API 旅程

鉴于以下原因,GraphQL 是最合适方案: GraphQL数据库无关技术,能够从任何地方为我们预先定义业务领域提供数据。...GraphLQ 支持内省(introspection),所以模式定义可以通过各种工具进行共享和下载, GraphiQL、GraphQL-playground 或 cli 工具。...简单来讲,解析器就是由开发人员提供一个函数,用来解析模式定义每个字段并从配置资源(如数据库、其他 API 或缓存等)返回值。...该字段解析器函数很可能会访问一个数据库,并构造和返回 ClassificationInsightByUser 对象一个列表。...执行查询 // 它将会调用解析器来获取数据并且只返回请求数据 val executionResult = graphQL.execute(executionInput) // 发送响应

1K10

graphql+koa2 前端bff层

promise.all,graphql可以更加便利一次请求多个数据) (利于服务同学)他们可以专心开发微服务,不用再去管数据聚合这类事情 需要预定义类型,开发之前我们就能知道数据结构基本样子 我们团队后端使用是...写了这两个配置之后,带有两个关键字请求都讲代理到本地node服务8080端口。接下来配置node中间层。 前端中间服务层配置 中间服务层使用koa2搭建,当然你也可以使用express等等其他。...Query是graphql顶层类型,除开Query我们常用还有Mutation。...那么这里定义了类型实现在哪里,实现就在resolvers,每个类型定义在resolver中都必须有解析器一一对应。...在解析器,他们数据来源可以是任何地方,有可能是数据库,也可能是其他接口。我们这里是做中间层转发。所以直接使用axios转发到后端了。那么类型定义参数就在这里获取使用。

8510

基于React和GraphQL黛梦设计与实现

后端这块是Node结合expressGraphQL接口,数据库用是MySQL。 GraphQL接口设计 我们先抛开GraphQL,就单纯接口而言。...Mock数据实现 第一步:导包 const express = require('express'); const { buildSchema } = require('graphql'); const...graphqlHTTP用来将相应实现以中间件形式注入到express。...在React,我们可以通过Class和Function方式创建组件,前者通过Class创建组件,具有相应生命周期函数,而且有相应state, 而后者通过Function创建更多是做展示用...React Hooks钩子, useState使得函数组件可以像Class组件一样可以使用state, useEffect它接受两个参数,第一个是函数,第二个是一个数组,数组元素变化会触发这个钩子函数执行

1.8K20

干货 | 携程机票Node.js开发实践

在机票H5实践前后端分离过程,我们改进了技术架构,在前端应用层,采用PM2+Node.js(8.9.4)+Express(4.0)框架,内部基于携程基础框架ctriputil,同时对一些常用功能封装...,Redis调用,ABTest获取,Qconfig集成。...对于基础数据信息采用Localstore进行本地持久化存储,对于状态数据采用Sessionstore进行管理,确保状态在当次session是有效。...APP多多,PC与APP在显示信息上是有差异,相同契约数据下发对于某一端来说会存在浪费,从而加大网络开销, 在APP上也会存在着版本之间差异,比如7.15版本和7.16版本,7.16上了一些新功能...PM2+Node.js+Express+Express-GraphQL,选用Express-GraphQL作为核心中间件,统一客户端请求入口为/graphql?

1.4K20

防止你GraphQL API被恶意查询

在这篇文章,他描述了他们是如何在攻击中保护GraphQL API。 使用GraphQL,你可以随时查询想要内容。 这对于使用API来说是惊人,但也具有复杂安全隐患。 ...虽然在其他应用层有一些缓解措施使在开始发送查询变得困难(CORS),但它们无法完全防止发生。 大小限制 我们考虑第一种天真的方法是通过原始字节来限制传入查询大小。 ...不幸是,它还有两个主要折衷: 1、我们永远不能更改或删除查询,只能添加新查询:如果任何用户运行过时客户端,我们不能阻止他们请求。 ...我们使用graphql-cost-analysis进行分析,因为我们最快解析器(20μs)和最慢解析器(10s +)之间存在很大差异,所以我们需要从中获得控制。 ...我通过Apollo Engine公开性能跟踪数据确定了某些解析器复杂程度。 我看了整个模式,并根据p99服务时间分配了一个值。

1.8K10

使用 React 和 GraphQL 做一个todo list

GraphQL GraphQL 允许我们定义 一个查询来提供一个通用接口在客户端和服务端之间来请求和处理数据。...介绍 GraphQL.js GraphQL.js 是一种基于jsGraphQL参考模型,它提供了两个重要功能: 创建一种类型语法模型(schema)。...query: queryType}); 让我们现在看一下给我们一个JSON数据结果js文件代码: var graphql = require ('graphql').graphqlvar express...一个值得注意事是我们在所有的修改传递参数,所以有的字段都 可接收参数。追加参数是相当简单,并且它们都可以被resolve函数捕获。...这个代码对比之前版本有两个主要变更。首先,服务端TodoModel已经被修改了。 ? 第二,我们本地创建了一个服务端代理来直接使用GraphQL 请求我们创建服务。

2K130

干货 | 携程机票Node.js开发实践

在机票H5实践前后端分离过程,我们改进了技术架构,在前端应用层,采用PM2+Node.js(8.9.4)+Express(4.0)框架,内部基于携程基础框架ctriputil,同时对一些常用功能封装...,Redis调用,ABTest获取,Qconfig集成。...对于基础数据信息采用Localstore进行本地持久化存储,对于状态数据采用Sessionstore进行管理,确保状态在当次session是有效。...APP多多,PC与APP在显示信息上是有差异,相同契约数据下发对于某一端来说会存在浪费,从而加大网络开销, 在APP上也会存在着版本之间差异,比如7.15版本和7.16版本,7.16上了一些新功能...PM2+Node.js+Express+Express-GraphQL,选用Express-GraphQL作为核心中间件,统一客户端请求入口为/graphql?

1.2K20

最流行六种 API 架构风格(附 Node.js DEMO)

# 前言 API 在现代软件开发扮演着重要角色,它们是不同应用程序之间桥梁,使得这些应用程序可以相互交互。...,因此它可以用于跨平台应用程序 通过 SOAP 实现跨平台移动应用程序和 Web 应用程序之间数据交换 SOAP API 适用于需要高安全性和复杂数据交换企业级应用程序和 Web 服务场景,但在简单数据交换场景下...大型 Web 应用程序 GraphQL 可扩展性和灵活性使得它适用于需要处理大量数据 Web 应用程序 Facebook、GitHub 等都在使用 GraphQL,以此来提高性能和可扩展性 微服务...# 适用场景 自动化工作流程 可以用于在应用程序之间自动触发某些操作 将新客户数据同步到 CRM 系统 实时数据同步 可以用于在应用程序之间实时同步数据 将新订单数据同步到财务系统 实时通知...此外,Webhook 还适用于需要在应用程序之间自动化触发某些操作场景,例如将数据同步到不同系统。但是,如果安全性是一个问题,或者需要扩展到大量事件和接收方,可能需要考虑其他方案。

1.7K60

大厂都在实践GraphQL,你了解吗?

前言 最近,GraphQL 在构建后端 API 方面获得越来越多大公司青睐, PayPal、Facebook、Hasura、去哪儿等公司都做了大量实践。...它有助于减少传输数据量。 这些只是其中一些优势。今天本文将介绍如何在 springboot 项目中实践 GrapQL API....定义模型后,让我们将其放在资源目录文件夹 graphql 下,文件名为 schema.graphqls 。Spring 会自动读取扩展名为 *.graphqlss 模型文件。...带有@QueryMapping注释函数将成为查询处理程序。 查询名称会自动映射到函数名称,或者使用 @QueryMapping接口value参数(在本例为person)显式定义它。...第一个操作创建一个人,只返回 id 和 name,因为我们只对这两个属性感兴趣。同样,创建地址接口返回地址类型和街道。 现在,让我们查询刚刚存储数据

2.1K40
领券