npm 包 @plan3-relate/hapi-cls 使用教程

简介

@plan3-relate/hapi-cls 是一个基于 Hapi 框架实现的 Node.js 应用程序的上下文管理工具,它提供了一种简洁的方式来管理全局上下文数据。这个工具支持基于 Continuation-Local Storage (CLS) 的数据存储,它允许您在异步请求链中共享上下文数据,包括日志跟踪、事务处理等场景。

本文将详细介绍 @plan3-relate/hapi-cls 的使用方法及其应用场景。

安装

获取 @plan3-relate/hapi-cls 可以通过 npm 命令进行安装:

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

使用

@plan3-relate/hapi-cls 是基于 async_hooks 构建的,因此您需要使用 Node 8 及以上版本。接下来,您需要在 Hapi 应用程序的配置中引入 @plan3-relate/hapi-cls 插件:

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

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

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

上述代码中,我们通过 server.register 方法将 @plan3-relate/hapi-cls 插件注册到 Hapi 服务器中。

API

hapi.cls.createContext()

createContext 方法创建一个新的 CLS 上下文对象,并将其附加到当前异步请求链。createContext 方法在 Hapi 请求处理函数中调用,例如:

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

在上述代码中,我们通过 createContext 方法创建了一个 CLS 上下文对象,在上下文中存储了 correlationId 属性,它是从请求 header 中获取的值。可以在使用该方案来实现多个异步函数公用一个 correlationId 的场景。

hapi.cls.getContext()

getContext 方法获取当前异步请求链中的 CLS 上下文对象。您可以在您的代码中调用 getContext 方法来获取当前异步请求链中共享的上下文数据,例如:

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

在上述代码中,我们通过 getContext 方法获取当前异步请求链中共享的上下文数据,然后从上下文对象中读取 correlationId 属性。

hapi.cls.runWithContext()

runWithContext 方法运行一个异步函数并将 CLS 上下文注入到它的执行上下文中,例如:

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

示例

我们来看一个完整的示例代码,它演示了如何使用 @plan3-relate/hapi-cls 来跟踪异步请求的日志:

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

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

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

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

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

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

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

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

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

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

在上述示例中,我们创建了一个 Hapi 服务器,并注册了 @plan3-relate/hapi-cls 插件。我们还创建了一个 Bunyan 日志记录器,它将用于记录每个请求的日志,实现了一个 log 中间件和 biz 中间件,在这些中间件中我们使用 @plan3-relate/hapi-cls 来共享请求上下文数据,并将其添加到日志记录器中。最后,我们启动 Hapi 服务器。

运行上述示例代码后,您将能够通过 Bunyan 日志记录器看到如下输出:

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

在上述日志输出中,我们可以看到每个请求的 correlationId 属性,它是从请求 header 中获取的。这些请求上下文数据共享在异步请求链中,并将跟踪整个请求的处理过程。

总结

在本文中,我们介绍了 @plan3-relate/hapi-cls 工具的使用方法及其应用场景。我们讲解了它提供的 createContextgetContextrunWithContext 等 API,以及如何使用这些 API 来管理异步请求的上下文数据。我们还演示了一个完整的示例代码,它介绍了如何使用 @plan3-relate/hapi-cls 和 Bunyan 日志记录器来跟踪异步请求的日志。我们相信,通过本文的介绍,您已经掌握了如何使用 @plan3-relate/hapi-cls 工具来管理全局上下文数据的技能。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/60055e6581e8991b448dbc8f


猜你喜欢

  • npm 包 codeceptjs-loki 使用教程

    简介 Codeceptjs-loki 是一个基于 Codeceptjs 框架的插件,能够帮助前端开发者进行自动化测试。它能够容易地管理测试数据,快速识别出错的地方,减少错误率和测试时间。

    2 年前
  • NPM 包 re-component 使用教程

    在前端开发中,有很多功能需要重复的代码。re-component 是一个 reutils 库中非常好的 npm 包,它可以帮助我们更方便地创建可重用的组件,提高开发效率。

    2 年前
  • npm 包 CircleCI-Weigh-in 使用教程

    如果你是一名前端工程师,那么你一定已经听说过 npm 和 CircleCI 这两个软件。npm 是前端开发中最常用的包管理器,而 CircleCI 是一种基于云的持续集成和持续交付工具,能够自动化测试...

    2 年前
  • npm 包 cowsay_quote 使用教程

    简介 cowsay_quote 是一个 Node.js 的开源 npm 包,它提供了一种有趣的方式来展示引用。借助该 npm 包,你可以在命令行中输出任何短语或语句,然后使用牛仔的 ASCII 图案来...

    2 年前
  • npm 包 mongo-oplog-filter 使用教程

    在 Node.js 的 Web 应用程序开发中,MongoDB 是应用最广泛的 NoSQL 数据库。MongoDB 提供了 oplog,即操作日志,用于在多节点复制的 MongoDB 集群中实现数据同...

    2 年前
  • npm 包 mongolauncher 使用教程

    在前端开发中,我们要使用各种工具帮助我们提高效率,mongolauncher 就是一个非常有用的 npm 包。mongolauncher 可以快速启动 MongoDB 数据库,方便我们开发和测试。

    2 年前
  • npm 包 lesshint-reporter-msbuild 使用教程

    前言 在 web 开发中,CSS 扮演着一个非常重要的角色,它是网页排版的重要手段。然而,当 CSS 的体量增大之后,维护 CSS 的难度也将随之增加,这时候 less 和 lesshint 就显得异...

    2 年前
  • npm 包 cordova-plugin-uwpbackbutton 使用教程

    在使用 Cordova 开发应用时,我们常常需要自定义返回按钮的逻辑。而在 UWP 平台上,返回按钮的逻辑与其他平台不同,因此需要使用 cordova-plugin-uwpbackbutton 插件来...

    2 年前
  • npm 包 dcr-jekyll 使用教程

    前言 在前端开发工作中,我们经常会用到静态网站生成器。其中,Jekyll 是一款十分优秀的静态网站生成器,可以轻松地将 Markdown 文档转换为静态网站。而 dcr-jekyll 则是 Jekyl...

    2 年前
  • npm 包 thelogic 使用教程

    前言 在前端开发中,我们常常需要使用各种第三方工具来提高开发效率和优化项目。NPM是最常用的包管理工具之一,可以让我们轻松地安装、更新和管理各种包。其中有一款常用的工具包,名为the logic,它可...

    2 年前
  • npm 包 validated-form 使用教程

    在前端开发的过程中,表单验证是一个非常重要的功能。在很多场景中,我们需要对用户输入的数据进行合法性检查。npm 上有许多优秀的表单验证工具,其中,validated-form 是一款非常受欢迎的工具。

    2 年前
  • npm 包 cagd 使用教程

    前言 cagd 是一款用于计算机辅助几何设计(Computer Aided Geometric Design,缩写为 CAGD)的 npm 包,包含了一系列的几何体和操作方法,供前端开发者使用。

    2 年前
  • npm 包:conventional-changelog-custom-angular-pom 使用教程

    1. 什么是 conventional-changelog-custom-angular-pom? conventional-changelog-custom-angular-pom 是一个基于 An...

    2 年前
  • npm 包 domose 使用教程

    domose 是一个非常方便且易于使用的 npm 包,它可以极大地帮助前端开发人员快速有效地操作 DOM 元素。本文将为大家提供详细的 domose 使用教程,内容将深入浅出,帮助读者更好地掌握该工具...

    2 年前
  • npm 包 parlev 使用教程

    介绍 parlev 是一个基于 Promise 的 URL 解析器,它可以将 URL 解析为一个 object ,包含协议、主机、端口、路径和查询参数等信息。parlev 可以帮助开发者轻松地解析 U...

    2 年前
  • npm 包 uigradients.gradients 使用教程

    前言 前端开发中,颜色选择和渐变处理是常见的操作。在网页设计中,渐变色可以很好地搭配配色方案,为页面增添美感,提高用户体验。npm 包 uigradients.gradients 提供了 180 种常...

    2 年前
  • npm 包 alara-kit 使用教程

    1. 什么是 alara-kit alara-kit 是一个基于 React 的 UI 库,本身是由四个子组件库组成的:Alara Colors、Alara Icons、Alara Typograph...

    2 年前
  • npm 包 bundle-duplicates-plugin 使用教程

    在前端开发过程中,我们经常会使用到类似于 Webpack 的打包工具来将我们的代码整合成一个或多个文件,以便于在浏览器上运行。但是由于不同的依赖关系,以及我们自己的代码编写习惯,可能会造成某些库被打包...

    2 年前
  • npm 包 material-maquette 使用教程

    前言 在现代 Web 开发中,许多前端工程师使用第三方库来加速开发过程、增强项目可维护性以及让项目更美观。在这些库中,material-maquette 可以帮助我们更快速地构建出美观的 Materi...

    2 年前
  • npm包viktor使用教程

    介绍 前端工程师在开发过程中,经常需要进行 DOM 操作和事件监听等工作。而viktor正是一个专门用于处理 DOM 操作和事件监听的快捷工具库。它为前端开发提供了更加方便快捷的解决方案。

    2 年前

相关推荐

    暂无文章