npm 包 @codeanker/feathers-mongoose 使用教程

阅读时长 8 分钟读完

在现代网页开发中,前端和后端已经不再是两个完全独立的部分,而是需要密切协作的。很多时候,我们需要在前端代码中与后端进行交互,例如实现用户登录和注册、获取数据、保存数据等等。FeathersJS 是一个让前端和后端轻松交互的框架,而 @codeanker/feathers-mongoose 是一个使用 FeathersJS 和 Mongoose 进行数据存储的 npm 包,本文将介绍如何使用它。

安装

如同安装其他 npm 包一样,可以通过 NPM 或 Yarn 进行安装:

或者:

配置

首先,我们需要对 @codeanker/feathers-mongoose 进行配置。创建一个 mongoose.js 文件,内容如下:

-- -------------------- ---- -------
----- -------- - --------------------

-------------- - -------- ----- -
  ----- ---------------- - -------------------
  ---------------------------------- -
    ---------------- -----
    ------------------- -----
  ---

  ------------------------- ----------
--

这里的 mongodb 是你的 MongoDB 数据库的连接地址,可以在 config/default.json 中进行配置。例如:

配置完成后,在 app.js 中引入 mongoose.js 并使用:

使用

现在,我们已经可以使用 @codeanker/feathers-mongoose 了。下面是一个简单的例子:

-- -------------------- ---- -------
----- ------------- - ----------------------------------------
----- -------- - --------------------

----- ------- - ------------------------- --- -----------------
  ----- -------
---- -- ------

-------------- - -------- ----- -
  -------------------- ---------------
    ------ --------
  ----
--

这里,我们创建了一个 messages 服务,使用了 createService 函数,它接收一个参数对象:

  • Model:Mongoose 的数据模型

然后,我们就可以通过 FeathersJS 提供的 RESTful API,使用 MongoDB 进行增删改查操作。例如:

  • GET /messages:获取所有消息
  • GET /messages/123:获取 ID 为 123 的消息
  • POST /messages:创建一条消息
  • PUT /messages/123:更新 ID 为 123 的消息
  • DELETE /messages/123:删除 ID 为 123 的消息

深入理解

在使用 FeathersJS 和 @codeanker/feathers-mongoose 的过程中,我们不仅仅是在调用 API,还涉及到了许多概念和实现细节。下面,我们简单介绍一些相关的内容。

钩子

钩子(hooks)是 FeathersJS 中的重要概念。它们可以理解为在真正执行操作之前或之后进行的中间操作。例如,我们可以在创建消息之前对消息进行一些处理,如生成时间戳,计算 MD5 值等等。又例如,我们可以在删除消息之后进行一些清理操作,如删除关联的文件,发送通知等等。

@codeanker/feathers-mongoose 对钩子进行了深度集成。我们可以直接在服务定义中使用钩子。例如:

-- -------------------- ---- -------
-------------------- ---------------
  ------ --------
  ------- -
    ------------ -
      ------------------- - --- ------- -- ------------
      ------ -----
    -
  -
----

这里我们定义了一个 before.create 钩子,对消息进行了处理。具体每个钩子的定义和用法可以参考 FeathersJS 的官方文档。

关联

在实际开发中,一个消息可能会有许多评论,而这些评论与消息之间有一定的关联。Mongoose 支持模型之间的关联,@codeanker/feathers-mongoose 同样支持对模型关联的处理。例如:

-- -------------------- ---- -------
----- ------------- - ----------------------------------------
----- -------- - --------------------

----- ------- - ------------------------- --- -----------------
  ----- -------
  -------- -
    ----- ------------------------------- -- --------
    ---- --------- -- ------
  --
----

----- ------- - ------------------------- --- -----------------
  ----- -------
---- -- ------

-------------- - -------- ----- -
  -------------------- ---------------
    ------ -------- -- ----
    --- ------ -- -- -- ---
    --------- -
      -------- ---
      ---- --
    --
    -------------- -
      - -- ---------- ------- --
        ----- -----------
        ------ --------
        --------- -
          -------- ---
          ---- --
        --
        ------- -
          ----- ----------
          --- ------
        -
      -
    -
  ----
--

这里我们定义了一个 comments 服务,它有一个关联的父表 messages。在 Comment 数据模型中,我们使用了一个新的类型 mongoose.Schema.Types.ObjectId,表示关联到 Message 模型的 _id 字段。在 childServices 中,我们定义了一个 comments 服务,使用了 Modelpaginateparent 等参数,指定了关联的父表名称和 ID 字段名等信息。

这样,我们就可以通过 /messages/messages/123/comments 等 API 来进行消息和评论的增删改查。在处理时,我们可以使用钩子、中间件等方式,对数据进行多种操作。

中间件

中间件(middleware)是 Express 和 FeathersJS 中的概念。它可以理解为对请求和响应进行处理的函数。例如,我们可以对请求参数进行解析和验证,对响应进行格式化和压缩等等。

在 @codeanker/feathers-mongoose 中,我们可以使用 FeathersJS 提供的 hooks 中间件来进行钩子操作。例如:

-- -------------------- ---- -------
----- - ----- - - -------------------------------

-------------------- ---------------
  ------ --------
  ------- -
    ------- -
      ----------
        ----------------------------- -- ---- --- -----
        -------------------------
      --
      -- -------
    -
  --
  ------ -
    ----- -
      -----------------
      -- -------
    -
  -
----

这里我们在 before.create 中使用了 hooks.iffhooks.disable,只在外部 API 调用中禁用了该操作。在 after.find 中使用了 hooks.paginate,对结果进行了分页处理。

结语

本文仅是对 @codeanker/feathers-mongoose 的简单介绍和使用教程。在实际开发中,对于数据存储和交互的处理还涉及到很多其他的因素,例如性能、安全、可扩展性等等。这些因素需要我们在实践中不断摸索和改进。希望本文能提供一些启发和指导,让您更加熟练地使用 FeathersJS 和 @codeanker/feathers-mongoose。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/108283