使用 Express.js+Mongoose+Vue.JS 实现真实时间数据 CRUD

阅读时长 22 分钟读完

前言:本篇文章以 Express.js 4.x 为主体,并结合 Mongoose 和 Vue.js 实现数据的真实时间 CRUD,需要对 Node.js 和 MongoDB 有一定的了解。

一、Express.js 的基础

1.1 安装和创建项目

先在本地安装 Node.js 和 MongoDB,然后在命令行中执行以下命令:

其中 -g 代表全局安装 express-generator,myapp 是项目名称。

1.2 配置路由

app.js 中,可以看到已经有一些路由的示例,不过我们需要自己定义一些路由:

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

-- ---------

-- -------
------------ -------------
----------------- -------------
------------------------ ----------------
展开代码

对于 productsRouter,我们需要自己定义它。在 routes 文件夹下新建 products.js

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

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

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

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

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

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

-------------- - -------
展开代码

1.3 安装和使用 MongoDB

在命令行中执行以下命令安装 Mongoose:

使用以下代码连接 MongoDB 数据库(也可以从 process.env.MONGODB_URI 取得 MONGODB_URI 环境变量):

1.4 编写数据模型

models 文件夹下新建 product.js,定义商品的数据模型:

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

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

-------------- - ------------------------- ---------------
展开代码

其中 timestamps 表示会自动在 Product 模型中添加 createdAtupdatedAt 字段。

1.5 在路由中使用模型

routes/products.js 中使用模型:

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

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

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

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

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

--------------------- ------------- ---- ----- -
  ---------------------------------------- ------------- -
    -- ----- - ------ ---------- -
    ---------- -------- ------- ---
  ---
---
展开代码

现在我们可以在 Postman 等工具中测试接口是否正常工作。

二、Vue.js 的基础

2.1 安装和创建项目

在命令行中执行以下命令安装 Vue:

新建 index.html 文件,并在其中添加以下代码:

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

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

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

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

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

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

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

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

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

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

        ------------------------------------- -
          ------- --------
        --
          ------------------- -
            ------ -----------
          --
          ----------------------- -
            --- ----------- - --------------------------------- -
              ------ ----- --- ------------
            ---
            ------------------------------- ---
          --
          -------------------- -
            -------------------
          ---
      -
    -
  ---
---------
展开代码

在浏览器中打开 index.html,我们会看到一个空的商品列表。

三、实现真实时间 CRUD

3.1 在 Express.js 中启用跨域

因为 Vue.js 是在浏览器中使用的,而 Express.js 是在服务器端运行的,所以需要启用跨域。

app.js 文件中添加以下代码(安装 cors 包):

3.2 在 Vue.js 中启用真实时间 CRUD

index.html 中添加以下代码:

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

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

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

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

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

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

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

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

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

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

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

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

      ----------------------- -------- ---------
    -
  ---
---------
展开代码

public 目录下新建 index.js 文件,添加以下代码(连接 Socket.io 并将其作为 socket 变量返回):

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

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

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

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

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

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

-------------- - ------- -- - ------ ------
展开代码

然后在 app.js 文件中,为 productsRouter 添加下列代码:

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

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

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

--------------------- ------------- ---- ----- -
  ---------------------------------------- ------------- -------- -
    -- ----- - ------ ---------- -
    -- ------
    -------------------- --------- ---------
    ---------- -------- ------- ---
  ---
---
展开代码

现在在浏览器中编辑和删除商品时,我们会看到 index.js 中打印出相应的消息。

四、总结

本文讲解了如何使用 Express.js+Mongoose+Vue.js 实现真实时间的数据 CRUD。具体包括:Express.js 的基础、Vue.js 的基础、实现真实时间 CRUD 等。

文章展示了使用最普遍的前端语言 JS 和最流行的库/框架来完成实时数据的演示及操作,可用于初学者快速了解前端开发的相关知识。

完整示例代码可以在 Github 中获取。

五、参考文献

[1] Express.js 入门教程

[2] Mongoose 官方文档

[3] Vue.js 官方文档

[4] Socket.io 官方文档

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

纠错
反馈

纠错反馈