npm 包 ember-lokijs 使用教程

阅读时长 7 分钟读完

在前端开发中,数据存储是必不可少的一个环节。而在这个环节中,Ember 和 LokiJS 两个库是非常实用的工具。Ember 是一个面向开发者友好的 JavaScript 框架,而 LokiJS 是一个 JavaScript 数据库,专门为了浏览器和 Node.js 设计。

本文介绍如何使用 npm 包 ember-lokijs 来连接 Ember 和 LokiJS,达到优化数据存储的目的。本文将围绕以下几点内容展开:

  • 安装 ember-lokijs
  • 创建和配置数据库
  • 在 Ember 应用程序中使用 LokiJS

1. 安装 ember-lokijs

安装 ember-lokijs 可以使用 npm 命令:

然后,将安装的 ember-lokijs 模块导入到 Ember 应用程序的 package.json 文件中,

2. 创建和配置数据库

使用 ember-lokijs 之前,必须先创建和配置数据库。这项工作包括安装和配置 LokiJS 数据库和定义和配置存储目标。下面是一个包含存储配置的 JavaScript 文件:

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

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

在这个文件中,database 对象是一个 LokiJS 数据库实例。通过在构造函数中设置 { autoload: true }autoloadCallback: databaseInitialize,可以使数据库自动加载和初始化。一旦数据库创建并启动,会自动调用 databaseInitialize 方法。

databaseInitialize 方法中,我们创建了一个集合 todos,并将 id 设置为 unique(唯一的),这意味着该字段不允许重复。

一旦创建和配置了数据库和存储目标,我们需要将这些信息导出以供其他模块使用。

3. 在 Ember 应用程序中使用 LokiJS

为了能够在 Ember 中使用使用将 LokiJS 连接,我们可以将其包装为 Ember Service。由于 LokJS 是一个异步数据库,我们需要使用 Ember 的 Ember.concurrency 库并利用它的能力来使这个过程顺畅。

这里是包装 LokiJS 的服务方法:

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

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

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

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

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

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

这个服务有一个 db 属性,表示 LokiJS 数据库的实例。当我们初始化服务时,会调用 setupDatabase 方法,在这个方法中我们创建并初始化 db 实例,保证它可以立即使用。采用 Ember.concurrency 库实现 setupDatabase 方法的异步操作,且加入必要的 500ms delay 以确保 databaseInitialize 方法已经被调用了。

dbInitialize 方法包含我们数据库的初始化逻辑,包括确保 todos 集合被创建且设置 id 为唯一值。

下一步,我们需要为我们应用程序的所有需要使用数据库的地方创建一个 mixin,以实现使用 LokiJS 进行存储操作。

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

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

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

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

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

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

这里有一个名为 LokiDbMixin 的 mixin。我们需要将其注入到任何需要连接 LokiJS 的地方,如 Route 或 Controller 等。

LokiDbMixin 中,我们有一个叫做 lokiDb 的服务,该服务包含用于连接到 LokiJS 数据库的逻辑。

_getCollection 方法根据集合名称获取集合,并确保如果集合不存在,则将其创建。

上面代码中的 createRecord 方法用于将对象插入到集合中。

下面是一个使用 LokiDbMixin 的例子:

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

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

在这个例子中,我们使用了 LokiDbMixin,并在 Route 的 actions 中使用 createRecord 方法将一个新对象插入到 todos 集合中。

以上就是使用 ember-lokijs 在 Ember 应用程序中存储数据的完整指南。

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

纠错
反馈