在现代化的 Web 应用开发过程中,拥有一个唯一标识符的请求 ID 在某些情形下十分重要和有用,例如在日志中将整个请求跟踪下来或者跟踪异常和错误。npm 包 express-request-id 可以很好地处理这类需求,本文将为大家介绍该包的使用方法和注意事项。
express-request-id 简介
express-request-id 是一个轻量级的 npm 包,它用于为 Express 应用程序生成唯一的请求 ID。通过在请求对象上增加一个 UUID (Universally Unique Identifier) 属性,实现了唯一标识每个请求。
安装
安装 express-request-id 可以使用 npm:
npm install express-request-id
安装前提
为了能使用 express-request-id,你需要保证已经安装以下包:
- Node.js - 建议使用版本 v12+
- Express - 建议使用版本 4+
使用方法
要为 Express 应用程序启用 express-request-id,需要先引入该包并使用它提供的中间件函数。在应用程序初始化期间,将此中间件函数添加为要处理的请求的处理函数之一:
const express = require('express'); const requestId = require('express-request-id'); const app = express(); app.use(requestId());
此时,我们已经成功在应用程序中启用了 express-request-id。在请求发生时,该中间件将生成一个 UUID 并添加到请求对象的头部。
请求对象现在将有一个名为 "req.id" 的属性,该属性包含新生成的 UUID。您可以通过在请求处理程序函数中使用 "req.id" 属性来访问该 ID。例如:
app.get('/users', (req, res) => { console.log(`Received a request with ID ${req.id}`); res.send('Hello World'); });
配置
在 express-request-id 中,有一些可用的选项可以用于配置中间件。默认情况下,它将生成一个符合 v4 UUID 规范的随机字符串并将其添加到请求 objects 中。以下是可供配置的选项:
- uuidVersion - 指定要使用的 UUID 版本,默认为 v4。
- fieldName - 指定向请求对象添加 UUID 的属性名,默认为 "id"。
- headerName - 指定应添加到请求头的 UUID 属性名。如果设置为 null,则不添加 UUID 头。默认为 "X-REQUEST-ID"。
- generator - 指定自定义 UUID 生成器。该生成器应该是一个返回 UUID 的无参数函数。
使用自定义选项来启用 express-request-id,请按如下方式使用:
app.use(requestId({ uuidVersion: 'v5', fieldName: 'myId', headerName: null, generator: () => 'CUSTOM-UUID' }));
示例代码
下面是一个完整的示例代码,用于演示 express-request-id 的用途:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --------- - ------------------------------ ----- ------ - ------------------ ----- --- - ---------- -- -- -- --- --------------------- -- ------- ----------------------- -- ---- ------------ ------------- ---- - --------------- ------ --- ------- -- --- ------------ --- ---------------- ---------- - ----------------- ---- ----- ---
在此示例中,我们将添加两个 Express 中间件函数:express-request-id 和 Morgan。Morgan 是一个常用的日志记录器,我们将用它来查看记录的请求日志。在每个路由处理程序中,我们将使用 "req.id" 属性来打印请求 ID。
结论
使用 express-request-id 可以方便地为 Express 应用程序添加一个独特的请求 ID,以帮助开发者追踪请求并监视日志。它的使用非常简单,只需在应用程序启动时使用中间件即可。同时,该包也提供了一些可用的配置选项,可以用于根据自己的需求进行偏好调整和更改。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/express-the-request-id