在 Express.js 中实现多用户的 RESTful API

阅读时长 13 分钟读完

Express.js 是 Node.js 环境下最流行的 Web 应用程序框架之一,其模块化和可插拔的结构使得其很容易实现 RESTful API。在本文中,我们将讨论如何在 Express.js 中实现多用户的 RESTful API。

需求分析

在实现多用户的 RESTful API 之前,我们需要确定具体的需求。在本例中,我们需要实现以下功能:

  1. 注册用户
  2. 用户登录
  3. 认证用户
  4. 实现 API 的 CRUD 操作

基于以上需求,我们需要实现以下 API:

  • POST /users:注册用户
  • POST /users/login:用户登录
  • GET /users/me:认证用户
  • POST /api:创建资源
  • GET /api/:id:获取资源
  • PATCH /api/:id:更新资源
  • DELETE /api/:id:删除资源

实现方法

  1. 创建应用程序

在创建应用程序之前,我们需要安装一些必须的依赖:

其中,express 是 Express.js 应用程序框架,body-parser 是用于解析请求体的中间件,jsonwebtoken 是用于生成和解码用户令牌的库,bcryptjs 是用于密码哈希和比较的库,mongoose 是 MongoDB 的对象文档映射(ODM)库,passportpassport-jwt 用于处理用户身份验证和 JSON Web Token。

在安装了必须的依赖之后,我们可以创建我们的应用程序。

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

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

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

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

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

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

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

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

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

在这个应用程序中,我们首先引入必要的依赖和配置,然后初始化 MongoDB 和 Passport.js。最后,我们引入用户和 API 的路由。

  1. 用户模型

在我们实现用户接口之前,我们需要先创建一个用户模型。

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

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

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

在这个模型中,我们定义了用户的名字,电子邮件地址,密码和创建日期。对于密码,我们将使用 bcryptjs 库对其进行哈希。

  1. 用户注册和登录

接下来,我们将实现用户注册和登录接口。

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

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

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

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

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

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

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

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

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

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

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

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

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

在这个路由中,我们引入了用户模型,验证注册和登录信息的中间件,以及生成 JSON Web Token 的库。在用户注册接口中,我们首先验证用户输入是否合法,然后检查是否存在同名用户。如果不存在同名用户,则将用户的密码哈希并保存到数据库中。在用户登录接口中,我们验证用户输入是否合法,然后在数据库中查找用户。如果用户存在,我们将检查输入的密码是否与数据库中的哈希匹配。如果匹配,我们将生成一个 JSON Web Token 并返回给客户端。

  1. API 模型

现在,我们将在数据库中创建一个名为 Api 的模型,用于表示我们的 API。

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

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

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

在这个模型中,我们定义了标题、描述、作者和创建日期。

  1. API 接口

最后,我们将实现用于管理 API 的接口。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

在这个路由中,我们首先引入 API 模型和 Passport.js。在获取所有 API 接口中,我们使用 populate() 方法将 API 的作者信息展开。在创建 API 接口中,我们使用 passport.authenticate() 中间件验证用户是否已经登录。在更新和删除 API 接口中,我们还检查请求的用户是否是 API 的作者。

这样,我们就完成了在 Express.js 中实现多用户的 RESTful API 的过程。本例中的代码可以作为示例,帮助你快速入门 Express.js。同时,我们也希望本文对你在实现多用户的 RESTful API 中有所帮助。

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

纠错
反馈

纠错反馈