npm 包 cls-hooked 使用教程

阅读时长 5 分钟读完

什么是 cls-hooked?

cls-hooked 是一个 Node.js 的 NPM 包,用于在异步调用链上分配和传递作用域的数据。它基于 Continuation Local Storage(CLS)模式实现,提供了一种简单的方式来跨越异步边界共享上下文。

使用 cls-hooked,我们可以在 HTTP 请求处理、数据库查询等多个异步操作中保存上下文信息,方便后续使用。

如何使用 cls-hooked?

  1. 安装 cls-hooked

    在你的 Node.js 项目中,运行以下命令:

  2. 引入并创建 CLS 实例

    在你的代码中,引入 cls-hooked 并创建 CLS 实例,如下所示:

    注意,my-namespace 可以替换为你想要的任意名称。

  3. 将需要共享上下文的代码封装在 run 函数中

    在需要共享上下文的异步代码块中,将其封装在 namespace.run() 函数中:

  4. 在链路中传递上下文

    在异步操作中,可以通过 namespace.set()namespace.get() 方法来存储和访问共享的上下文变量。例如:

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

    在此示例中,我们在数据库查询中存储了 key 变量,并在回调函数中读取了它。由于使用了 CLS,即使在异步操作中,我们仍然可以访问共享的上下文变量。

示例代码

以下是一个完整的示例代码,演示了如何使用 cls-hooked 来在异步操作中共享上下文信息。

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

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

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

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

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

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

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

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

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

在这个示例中,我们在 HTTP 请求处理函数中使用 CLS,保存了当前请求的用户 ID,并在后续的数据库查询中共享了该信息。这样,在异步操作中,我们仍然可以访问到这个共享的上下文变量。

总结

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

纠错
反馈