npm 包 nannoq-proxies 使用教程

阅读时长 12 分钟读完

nannoq-proxies 简介

nannoq-proxies 是一个基于 ES6 Proxy 的 JavaScript 库,通过对对象进行代理和拦截,实现访问控制和数据验证的功能。如果你需要对一个对象进行访问权限验证或数据验证,或者想要实现类似于 ActiveRecord 的 ORM 功能,nannoq-proxies 可能是一个不错的选择。

安装和引入

可以通过 npm 安装 nannoq-proxies:

引入:

使用方法

nannoq-proxies 的使用非常简单:通过 proxyFactory(obj, handler) 方法返回一个代理对象,其中 obj 是需要代理的目标对象,handler 是代理对象的处理器。

  • 代理对象会拦截对目标对象属性的读取和设置,并在拦截前对数据进行验证。
  • 对于函数属性,代理对象会将函数调用转化为对方法属性的调用,并将调用和参数传递给方法属性。

验证

代理对象的处理器可以通过在 getset 方法中添加验证器来对数据进行验证。例如,下面的示例中,我们将对 person 对象的 name 属性进行验证,确保其不为空并且为字符串:

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

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

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

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

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

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

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

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

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

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

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

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

set 方法中抛出异常会阻止写入,确保数据始终处于有效状态。

关联属性

代理对象可以通过在 get 方法中返回一个新的代理对象来构建一个更为复杂的验证体系。例如,下面的示例中,我们将通过关联 age 属性到 birthday 属性上,并利用 birthday 属性进行日期格式验证:

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

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

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

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

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

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

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

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

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

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

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

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

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

set 方法中我们将输入的日期转换为时间戳并存储到 birthday 属性中,由此计算出的年龄可以通过 get 方法直接获取。

ORM

nannoq-proxies 可以用于创建一个类似于 ActiveRecord 的 ORM 框架,将代理对象关联到数据库的表中。

例如,下面的代码演示了如何使用 nannoq-proxies 实现一个类似于 ActiveRecord 的 ORM。在此示例中,我们将 person 对象存储到一个名为 persons 的 MongoDB 集合中:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

在这个例子中,我们对 person 对象进行了代理,并在代理对象中增加了 saveupdatedestroy 方法,实现了类似于 ActiveRecord 的 ORM 功能。如果需要将数据存储到其他的数据库(如 MySQL、PostgreSQL 等),只需要实现相应的存储方法即可。

总结

本文介绍了 nannoq-proxies 的用法和一些示例,包括访问和数据验证、关联属性和 ORM 功能。通过使用代理对象,我们可以实现更加复杂的功能,并将其封装成一个可重用的 npm 包,在开发、测试和维护过程中提供更大的便利。

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

纠错
反馈