介绍
morgan是一个 Node.js 和 Express 中间件,用于记录 HTTP 请求和错误,并简化流程。在Node.js和受快递,中间件是可以访问的功能request
和response
生命周期方法,并next()
继续在您的Express服务器的逻辑方法。
在本文中,您将探索如何在 Express 项目中实现摩根。
先决条件
要阅读本文,您需要:
- 建议对 Node.js 有一个大致的了解,但不是必需的。要了解有关 Node.js 的更多信息,请查看我们的如何在 Node.js 中编码系列。
- Node.js 安装在本地,您可以按照如何安装 Node.js 和创建本地开发环境来完成。
步骤 1 – 设置项目
由于 Express.js 是一个 Node.js 框架,因此在继续之前,请确保您拥有来自Node.js的最新版本的 Node.js。
要将摩根包含在您的 Express 项目中,您需要将其安装为依赖项。
创建一个以express-morgan
您的项目命名的新目录:
- mkdir express-morgan
切换到新目录:
- cd express-morgan
使用默认值初始化一个新的 Node 项目。这将包含package.json
用于访问依赖项的文件:
- npm init -y
安装 morgan 作为依赖:
- npm install morgan --save
创建您的入口文件,index.js
. 这是您将在 Express 服务器中处理逻辑的地方:
- touch index.js
现在您已将 morgan 添加到您的项目中,让我们将其包含在您的 Express 服务器中。在您的index.js
文件中,实例化一个 Express 实例并要求morgan
:
const express = require('express');
const morgan = require('morgan');
const app = express();
app.listen(3000, () => {
console.debug('App listening on :3000');
});
现在您的 Express 服务器已设置完毕,让我们看看如何使用 morgan 添加请求日志记录。
第 2 步 – 在 Express 中使用摩根
要在您的 Express 服务器中使用摩根,您可以调用一个实例并.use()
在您的 HTTP 请求之前在中间件中作为参数传递。morgan 带有一套预设或预定义的格式字符串,用于创建具有内置格式和选项的新记录器中间件。该预设tiny
在记录 HTTP 请求时提供最少的输出。
在您的index.js
文件中,调用app.use()
Express 中间件并morgan()
作为参数传递:
const app = express();
app.use(morgan('tiny'));
将预设tiny
作为参数包含到morgan()
将使用其内置方法、识别 URL、声明状态和请求的响应时间(以毫秒为单位)。
或者,摩根读取预设,如tiny
以下定义的格式字符串:
morgan(':method :url :status :res[content-length] - :response-time ms');
这倾向于以tiny
摩根解析的格式包含在预设中的相同功能。继:
符号是摩根函数调用令牌。您可以使用格式字符串定义令牌来创建您自己的自定义摩根中间件。
第 3 步 – 创建您自己的代币
摩根中的代币是在:
符号之后标识的功能。morgan 允许您使用该.token()
方法创建自己的令牌。
该.token()
方法接受一个类型或令牌的名称作为第一个参数,跟随一个回调函数。每次发生日志时,morgan 都会使用令牌运行回调函数。作为中间件,morgan 将req
和res
对象用作参数。
在您的index.js
文件中,使用该.token()
方法,并传递一个类型作为匿名函数后的第一个参数:
morgan.token('host', function(req, res) {
return req.hostname;
});
匿名回调函数会将对象hostname
上的返回req
为新令牌,以在 Express 服务器中的 HTTP 请求中使用。
第 4 步 – 使用自定义参数设计令牌
要表示自定义参数,您可以使用方括号来定义传递给令牌的参数。这将允许您的令牌接受额外的参数。在您的index.js
文件中,将自定义参数应用于:param
令牌中的摩根格式字符串:
app.use(morgan(':method :host :status :param[id] :res[content-length] - :response-time ms'));
morgan.token('param', function(req, res, param) {
return req.params[param];
});
定制参数id
的:param
在摩根调用令牌将包括以下中相应的参数的ID.token()
方法。
结论
摩根在记录 HTTP 请求时提供了灵活性,并以自定义格式字符串或预设更新精确状态和响应时间。如需进一步阅读,请查看摩根文档。