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

从Rest(Express)迁移到GraphQL:模型(Mongoose)在graphQL解析器中不起作用

从Rest(Express)迁移到GraphQL:模型(Mongoose)在graphQL解析器中不起作用

在将应用程序从Rest架构迁移到GraphQL时,可能会遇到模型(使用Mongoose)在GraphQL解析器中不起作用的问题。这个问题通常是由于GraphQL的数据解析方式与Rest架构不同所导致的。

在Rest架构中,模型通常直接与数据库进行交互,并通过控制器将数据返回给客户端。而在GraphQL中,数据解析是通过定义解析器函数来实现的,这些解析器函数负责从数据库中获取数据并返回给客户端。

要解决这个问题,可以按照以下步骤进行操作:

  1. 确保已正确配置GraphQL解析器:首先,确保已正确配置GraphQL解析器,并将其与Express应用程序集成。这可以通过使用适当的GraphQL中间件来实现,例如express-graphql
  2. 创建GraphQL解析器函数:为每个模型创建相应的GraphQL解析器函数。这些解析器函数负责从数据库中获取数据,并将其转换为GraphQL类型后返回给客户端。可以使用Mongoose提供的查询方法来实现这一点。
  3. 定义GraphQL模式:使用GraphQL的模式语言(Schema Language)来定义GraphQL模式。在模式中,定义每个模型的类型以及与之关联的解析器函数。
  4. 将解析器函数与模型关联:在定义模型类型时,将相应的解析器函数与之关联。这样,当客户端请求相关数据时,GraphQL解析器将调用相应的解析器函数来获取数据。
  5. 测试GraphQL解析器:使用GraphQL客户端工具(如GraphiQL)来测试GraphQL解析器是否正常工作。通过发送查询请求并检查返回的数据是否符合预期,可以验证解析器是否正确地从数据库中获取数据。

总结起来,将应用程序从Rest迁移到GraphQL时,需要重新定义解析器函数,并将其与模型关联。这样,GraphQL解析器将能够正确地从数据库中获取数据并返回给客户端。在腾讯云中,可以使用腾讯云云开发(CloudBase)来搭建GraphQL服务,具体可以参考腾讯云云开发文档中的相关内容:腾讯云云开发

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

GraphQL】225-GraphQL真香入门教程

下面开始本文内容: 一、GraphQL介绍 GraphQL 是 Facebook 开发的一种 API 的查询语言,与 2015 年公开发布,是 REST API 的替代品。...GraphQL 查询能够遍历相关对象及其字段,使得客户端可以一次请求查询大量相关数据,而不像传统 REST 架构那样需要多次往返查询。... express ,可以很简单的使用中间件来将请求进行拦截,将没有权限的请求过滤并返回错误提示。 中间件实际上是一个函数,接口执行之前,先拦截请求,再决定我们是否接着往下走,还是返回错误提示。...属性上 属性定义 定义类型后,键值对形式 定义参数对象 fields 属性,值为对象,每个属性名为键名,值也是对象,其中 type属性的值为 graphql 的属性,下面会补充 补充: fields...'express-graphql') const mongoose = require('mongoose') const DB_PATH = 'mongodb://127.0.0.1:27017/hero_table

8.1K21

GraphQL真香入门教程

介绍 GraphQL 是 Facebook 开发的一种 API 的查询语言,与 2015 年公开发布,是 REST API 的替代品。...GraphQL 查询能够遍历相关对象及其字段,使得客户端可以一次请求查询大量相关数据,而不像传统 REST 架构那样需要多次往返查询。... express ,可以很简单的使用中间件来将请求进行拦截,将没有权限的请求过滤并返回错误提示。 中间件实际上是一个函数,接口执行之前,先拦截请求,再决定我们是否接着往下走,还是返回错误提示。...'express-graphql') const mongoose = require('mongoose') const DB_PATH = 'mongodb://127.0.0.1:27017/hero_table...总结 GraphQL 是一种 API 的查询语言,是 REST API 的替代品。 GraphQL 可以使用一个请求,获取所有想要的数据。

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

    传统的基于 REST 的 API 方法,客户端发出请求,而服务端决定响应。 但是 GraphQL ,客户端可以精确地确定其服务器获取的数据。...} } } 这个解析器需要两个参数:一个代表父的对象(最初的根查询,这个对象通常是未使用的),一个包含传递给你的字段的参数的 JSON 对象。...左侧窗格,你可以输入所需要的任何有效 GraphQL 查询,而在右侧获得结果。...但这个缺点也是积极的:通过仔细设计你的 Graphql Schema,你可以避免更容易实现(也更容易破坏)的 REST 端点中明显的陷阱,如命名的不一致和混乱的关系。...此外,你应该尽量将业务逻辑和解析器逻辑分开。你的业务逻辑应该是这个应用程序的单一事实来源。解析器执行验证检查是很有诱惑力的,但随着模式的增长,这将成为一种难以维持的策略。

    8.3K40

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

    云原生(Cloud Native)Node JS Express Reactive 微服务模板 (REST/GraphQL) 这个项目提供了完整的基于 Node JS / Typescript 的微服务模板...Mocks 作为 TDD 的一部分,我们可能需要模拟 graphql 响应,直到我们能够实现解析器为止 该基础结构设置为仅为当前未实现的解析器添加模拟。...因此,一旦实现可用,实际的解析器就会接手。同样,如果解析器执行失败,那么这将落在模拟响应上。此功能只能在开发期间使用,因此已添加检查以禁用“生产”版本的此功能。...为了支持 设置环境变量 GRAPHQL_MOCK 为 true mocks/index.ts 文件定义 mock 解析器(resolver) 作为示例,有查询添加了 examplesMock, peopleMock...此处的区别在于,我们使用 @auth 指令根据角色来处理身份验证,而不是对解析程序的实现进行硬编码。这是更清蒸的方法,并且与解析器分离。

    2.3K10

    Coursera 的 GraphQL 之旅

    在过去一年,我们构建了一系列的工具来将所有的 REST API 转换为 GraphQL我们的后端开发人员继续编写他们熟悉的 API 的同时,让客户端开发人员可以通过 GraphQL 访问所有数据。...在生产环境应用 GraphQL 封装 REST API 的过程很简单——我们构建了一些实用程序来执行下游的 REST 请求,从而在解析器获取数据,并制定了一些关于如何将现有模型转换为 GraphQL...首先,我们构建了少量的 GraphQL 解析器,然后在生产环境启动一个 GraphQL 服务器,以调用下游 REST 接口请求我们的资源。...但是,我们最初的方案仅提供了 REST API 返回的模型GraphQL 返回的模型之间的一对一映射。...还有比较重要的一点,迁移到 GraphQL 的过程并不会大幅降低开发人员的生产力。

    1.2K40

    基于 Express 应用框架的技术方案选型浅谈

    WEB 应用的标准框架,大多数工程师都很熟悉他的设计思想(极简的内核,但能让你用各种中间件来扩展他的功能) Koa :设计思想非常类似 Express,区别在于它是使用 ES6 的 generator...Vue 技术方案选型 2018年6月,使用 Vue 设计了服务端渲染的 Express 应用,大致技术选型如下: Mongoose Nuxt Vue lokka Muse-UI 客户端和服务端同构代码的...为了支持 Graphql 查询语言,服务端选择使用支持 Express 中间件扩展的 graphql-yoga。...客户端的 HTTP 请求需要符合 Graphql 请求格式,一种方式是使用 axios 等模拟 Graphql 的请求格式,另外一种方式是选用支持Graphql 请求格式的请求库,这里选用 lokka...项目目录结构 Nuxt 的目录结构,服务端引入的同构代码放在.nuxt 目录,是 Webpack 打包后的代码文件,因此如果服务端不使用特殊的语法,完全不需要 Backpack 配置。

    7K30

    基于 egg.js 构建 graphql api 服务

    package: '@switchdog/egg-graphql', }, 配置插件 通常插件都会有一些配置项,/config/config.default.ts配置即可: config.graphql...true, // 设置为true时,以Apollo跟踪格式收集和公开跟踪数据 debug: true, // 一个布尔值,如果发生执行错误,它将打印其他调试日志记录 }, }; 中间件开启...使用 graphqlrest 端点时,实际上不必担心使用 CSRF 保护。对服务的请求应该是无状态的,并且不真正依赖Cookie或会话数据。...可以理解为 {id: 1, name: 'jack'} 项目启动 npm run dev 浏览器输入 http://127.0.0.1:7001/graphql 出现如下界面说明已经 graphql...MongoDB查询数据 安装 egg-mongoose yarn add egg-mongoose 配置 // config/plugin.ts exports.mongoose = { enable

    1.8K10

    用Node.js创建安全的 GraphQL API

    因为GraphQL团队提供了全面的文档,并在Introduction to GraphQL列出了几个最佳实践。 什么是GraphQL查询? 如上所述,查询是客户端API读取和操作数据的一种方式。...GraphQLREST更好吗? GraphQL是一种适合多种情况的方法。 REST是一种体系结构方法。...在后台场景,我们的配置会将 TypeScript 代码编译为纯 JavaScript,然后build文件夹执行构建。 现在为GraphQL API配置一个基本框架。...下一步是Express处理我们的程序和基本的GraphQL配置,例如: 1 import express from 'express'; 2 import graphqlHTTP from 'express-graphql...typeDefs - 我们可以查询和修改获得的模式的定义。 Resolvers - 在这里我们定义了查询和修改的功能和行为,而不是想要的字段或参数。

    1.6K30

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

    实现API Gateway 实现支持多种客户端的REST API的API Gateway非常耗时,你可能需要考虑使用基于图形的API框架,如GraphQL。...它可以由三部分组成: GraphQL模式:定义服务器端数据模型及其支持的查询 解析器函数:解析函数将模式的元素映射到各种后端服务。 代理类:代理类调用应用程序的服务。...GraphQL通过调用解析器函数检索数据,以此实现API组合模式。 GraphQL通过递归调用Query文档中指定的字段解析器函数来执行查询。...首先,它执行查询解析器,然后递归调用结果对象层次结构字段的解析器。 使用批处理和缓存优化负载 批处理将N个调用转换为服务,变成单个调用,该调用将检索一批N个对象。...为了让客户端调用GraphQL,你需要将它与Web框架集成,如Express Web

    1.4K30

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

    原文地址:How to Create a Secure Node.js GraphQL API 作者:Marcos 本文的目的是提供一份快速指南 -- 《如何快速如何在 Node.js 创建安全的...本文中,我们将关注与怎么使用框架来构建 GraphQL API。 GraphQLREST 更好吗? 这个问题可能会有点「引战」,但不得不说,这得看情况来选择。...GraphQL 一些场景中非常适合。REST 是一种架构设计模式,很多场景也得到了验证。如今,有大量的文章试图证明为什么一个比另一个好,或者你应该使用 REST 而不是 GraphQL。...这篇文章还展示了如何使用 Node.js 和 Express 来开发 REST API 框架,你可以在这两种方法找出一些差异。...'; import { makeExecutableSchema } from 'graphql-tools'; 下一步是 Express 处理我们的应用逻辑和基本的 GraphQL 配置,例如:

    2.5K20

    Django 和 Keystone.js 的详细对比

    Keystone.js 是一个基于 Node.js 和 Express.js 的开源内容管理系统和 Web 应用框架,专注于快速开发和内容驱动的应用。1....ORM (对象关系映射)Keystone.js:特点:内置支持 MongoDB 和 PostgreSQL,通过 Mongoose 和 Knex.js 进行数据库操作。...API 构建Keystone.js:特点:提供 GraphQLREST API 支持,便于与前端框架和移动应用进行数据交互。特性:内置 GraphQL 支持,方便快速构建 API。...Django:特点:Django 可以通过 Django REST framework (DRF) 和 Graphene-Django 实现强大的 RESTGraphQL API 支持。...总结Django 作为一个成熟且功能强大的 Web 框架,提供了与 Keystone.js 类似的许多功能,甚至某些方面更为强大和灵活。

    14000

    何为GraphQL

    在此篇教程你将学到: GraphQL的原理 它如何与REST进行比较 如何设计数据模式 如何配置一个GraphQL服务器 如何实现查询和变动 和一些额外的高级主题 ? GraphQL的亮点在哪里?...深入讨论GraphQL的细节之前,让我们将其与REST进行比较,谁是目前最流行的web API。 REST遵循一个以资源为导向的模型。...这个方法避免了许多API终点的问题,但它违背了REST模型的理念。 你可以说GraphQL已将此方法用到了极致。它不是根据明确定义的资源来思考,而是根据整个资源领域的子图来进行思考。 ?...所有类型都在描述GraphQL领域对象模型的模式定义。 这是NBA领域的一个非常简化的模式。...这是一个基于node-express的全功能GraphQL服务器。 它有一个在内存里硬编码的数据库。 通常,数据将存储在数据库其它服务获取。

    3.5K60

    微服务下使用GraphQL构建BFF | 洞见

    微服务的角度来看,有了 BFF 之后,微服务之间的相互调用更少了。这是因为一些UI的逻辑 BFF 层进行了处理。...相比于 REST 风格,GraphQL 具有如下特性: 1. 定义数据模型:按需获取 GraphQL 服务器实现端,需要定义不同的数据模型。...前端的所有访问,最终都是通过 GraphQL 后端定义的数据模型来进行映射和解析。并且这种基于模型的定义,能够做到按需索取。...那么客户端调用的时候,query 只需要传入 users {id \n name}即可。后台定义模型,客户端只需要获取自己关心的数据即可。 2....如果在 REST ,可能会增加 api/v2/inspections进行 API 升级。但是 BFF ,为了向前兼容,我们可以使用图三的结构。

    2.1K60

    你不知道的 GraphQL

    你会发现借助于GraphQL工具链,这并不比开发Rest客户端难多少。 一切Schema开始 当我开发一个GraphQL服务时,我总会白板上设计模型开始,而不是上来就写代码。...我们可以浏览器访问http://localhost:4000/graphql[11]就能看到Web界面了。它会我们的服务拿到完整的schema结构,并创建一个可视化的文档。...我们的例子,Tweet.Authorresolver被调用了多次,针对每个Query.Tweetsresolve得到的Tweet。...但这种响应显示错误信息的简单处理,并没有服务端记录错误日志。...可以Apollo: GraphQL Input Types And Client Caching[30]了解更多细节 Persisted Queries:这个主题会在后续的文章涉及。

    3.3K20

    用ServBay快速构建下一代GraphQL应用

    我们深入构建微服务的过程之前,了解 GraphQL 在此架构的作用非常重要。什么是GraphQL?...主要功能包括声明式数据获取:使用 GraphQL,客户端可以查询精确指定所需的数据,包括字段和关系。这消除了传统 REST API 经常出现的数据过度获取和获取不足的问题。...高效的类型系统: GraphQL 拥有强大的类型系统,可以 API 定义数据的结构和关系。高效的数据加载功能: GraphQL 使客户端能够单个请求检索多个资源。...Sequelize定义模型模型是代表数据库中表的抽象:const User = sequelize.define('User', { // 定义模型属性 firstName: { type...lastName: String}第6步:为GraphQL API创建解析器解析器是一个函数,它负责为每个客户端发来的GraphQL查询提供响应。

    17900
    领券