简介
Feathers-mongoose-relay 是一个为了简化开发者使用 Node.js 平台下基于 FeathersJS 框架和 Mongoose 对 MongoDB 进行数据管理或 API 开发过程中 MongoDB 查询器开发效率而生的 npm 包。Feathersjs 是一个用于构建实时应用程序的现代 Web 应用框架,它基于一个可扩展的服务和插件体系结构。而 Mongoose 则是一个 NodeJS 下对 MongoDB 官方驱动进行了优美封装,提供了 Schema 机制和 Model - Collection 映射功能的对象模型工具库。
如果您正在使用 Feathersjs 和 Mongoose 进行开发或学习,那么 feathers-mongoose-relay 将为您的开发提供高效、易用、优美的解决方案。本文将为您详细介绍如何使用 feathers-mongoose-relay 进行开发工作。
安装
首先,您需要在项目的根目录下进行安装:
npm i feathers-mongoose-relay --save
基本使用
在这一部分中,我们将为您介绍如何在项目中进行简单的使用。
你需要先在 app.js 中引入 FeathersJS 和 Mongoose:
const feathers = require('@feathersjs/feathers'); const mongoose = require('mongoose');
您需要在 FeathersJS 中注册 Mongoose:
-- -------------------- ---- ------- ----- --- - ----------- ------------------------------- ----- -- - -------------------- ----- --------- --------- --- -------------------------------------------------------------- - ---------------- ----- --- ------------------------
接下来,您需要创建一个适配器用于 feathers-mongoose-relay。适配器接受一个 Mongoose 模型,将它的数据结构解析为通用的GraphQL规则,并将它们直接映射到GraphQL中的定义。我们将创建一个电子邮件模型(Email),如下所示:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ------ - --- ----------------- ----- ------- --- ------- -------- ------- ----- ------- --- -------------- - ----------------------- --------
为 Email 模型创建适配器:
const GraphQLAdapter = require('feathers-mongoose-relay'); const emailModel = require('./models/email'); const emailGraphqlDefinition = GraphQLAdapter.graphql(emailModel);
现在,我们可以在 FeathersJS 服务上注册该适配器:
const emailService = app.service('/email'); emailService.hooks({}); // Add hooks if you want emailService.adapter(GraphQLAdapter.adapter(emailModel, { find: {} }));
注册 GraphQL 模块,并查询邮件数据:
-- -------------------- ---- ------- ----- - ------------ ----------------- - - ------------------- ----- ------ - ------------- ---- ----- - ------ --------------- - ---- --------------- - ------ ----------- - ---- --------- - ----- ----- - ---- ----- - --- -- ----- ------ --- ------ -------- ------ ----- ------ - --- ----- ---- - - ------ ------ ----- -------- -- ------------------------------- -- -- ------ ------------------------------------ ---- -- ------------------- ----------------- ------- ------- ---------- ----- --------- ----- ----
对于传统的 FeathersJS 用户,这种数据访问方式非常简单,现在您可以自由地使用 GraphQL 进行数据查询,也可以利用 FeathersJS 的服务实现对数据的增加、删除和修改等。
高级使用(万能的 resolvers)
在前面的章节中,我们使用 rootReducer 作为 GraphQL 的根解析器,其包含了“email”字段的解析器。该解析器直接通过 Service 进行 CRUD 请求,并将结果返回给 GraphQL 客户端。
然而,以这种方式进行操作存在一定的缺点。例如,云计算平台企图同时查询多个服务并合并结果时,将会遇到困难。同样,您可以鼓励客户端使用 Relay to 提高 React Native 应用程序的性能。
在 GraphQL 规范中,我们可以使用 Schema、Resolvers 和 Connector,为数据源提供一个完整的 GraphQL 抽象。我们将使用 Resolvers,它的作用是将外部数据源映射到 GraphQL 定义上。
这样,我们可以使用解析器作为 Resolvers 的实现器,它不仅可包括 Service 的 CRUD 操作,而且还提供了其他数据源,如社交媒体和第三方服务。
首先,需要安装 graphql-tools:
npm install --save graphql graphql-tools
建立 schema 和 Resolver:
-- -------------------- ---- ------- ----- - -------------------- - - ------------------------- ----- ----------- - - ---- ----- - ---------------- ---------------- - ---- --------------- - ------ ----------- --------- -------- - ---- --------- - ------- ------- ----- ----- - ---- ----- - --- --- ----- -------- --- -------- -------- ------- ----- ------- - ---- -------- - ---------- ------ ------------ -------- ------------ -------- - -- ----- -------------- - - ------ - ---------------- --- ----------- -- ----------------------------- -- --- ------------------ ------------- -- -- ----- ------------ - - ------ ------ ------ -------- ------ ---- --------- ---- - ------- ------- ----- ----- - --------- ---------- - ------ ------- --------- --------- - --
GraphQL 的根解析器即为 pagination:
-- -------------------- ---- ------- ----- ---------- - ------------------- ----------- - ----------- - ------- --------------- - ----------- - ----- - -- -- --------------------------- -------- - -- -- - ----- - ------ ---- - - --------------- -- --- ----- -------- - - ------------ ------ ---------------- ------ -- -- ------ -- ------------------ -- ------- - ------------------------ - ---- --- -- - ---- -- ------ - ---- -- ------------------- - -------------------- - ----- - ----- ------ - ------------------------------------- - -------------------- ------ - ------------ ---------- ------- -- -- -
FeathersJS 服务则需要将结果转化为 GraphQL Edge:
-- -------------------- ---- ------- ----- ------ - ------- -- ---------------------------------------------- ----- ------------- - ------ -- ------------- -- -- ------- ----------------------------- ----- ---- ----- ------------------- - ------ -- - ----------------- - - ------ - ---------- -- - -- ------ ---------------------- -- -------------------- ----- ------------------- ---
现在,我们可以使用 feathers-mongoose-relay 的框架,在需要时添加 Resolvers,请务必进行深入学习以便完全理解。
小结
本文通过对 FeathersJS 和 Mongoose 的广泛调研,提出了使用 Node.js 平台进行数据管理或 API 开发的单一解决方案。通过对 feathers-mongoose-relay 的介绍,简化了服务和客户端之间的通信,从而实现了良好的开发效率、性能和响应速度。
希望本文可以为您提供有帮助的信息,从而在向您的数据 API 进程中更快、更简单地动手。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600555cf81e8991b448d2e4f