七爪源码:如何在你的 Node.js 项目中使用 Morgan。
日志记录是编写软件的基本要素,因为它可以帮助我们查看软件操作、调试和捕获错误。
Morgan 是一个日志工具(中间件),可用于使用 Express 和 Node.js 实现的 HTTP 服务器。 它可用于将请求、错误等记录到控制台。
在这篇文章中,我们将学习如何在 Node.js 项目中使用 Morgan。
设置 Express.js 项目
由于 Express.js 是一个 Node.js 框架,因此在继续之前,请确保您拥有来自 Node.js 的最新版本的 Node.js。
要将 morgan 包含在您的 Express 项目中,您需要将其安装为依赖项。
为您的项目创建一个名为 test-morgan 的新目录:
mkdir test-morgan
切换到新目录:
cd test-morgan
使用默认值初始化一个新的 Node 项目。 这将包括您的 package.json 文件以访问您的依赖项:
npm init --yes
安装 morgan 和 express 作为依赖项:
npm install morgan express --save
创建您的入口文件 index.js。 这是您将在 Express 服务器中处理逻辑的地方:
touch index.js
现在您已经将 morgan 添加到您的项目中,让我们将它包含在您的 Express 服务器中。 在您的 index.js 文件中,实例化一个 Express 实例并要求 morgan:
import express from 'express';import morgan from 'morgan';const app=express();app.listen(3000,()=>{console.log('Listening on port 3000...')})
现在设置好 Express 服务器,让我们看看使用 morgan 添加请求日志记录。
摩根入门
要在 Express 服务器中使用 morgan,您可以在 HTTP 请求之前调用一个实例并将其作为 .use() 中间件中的参数传递。 Morgan 带有一套预设或预定义的格式字符串,用于创建具有内置格式和选项的新记录器中间件。 预设的 tiny 在记录 HTTP 请求时提供最小的输出。
在您的 index.js 文件中,调用 app.use() Express 中间件并将 morgan() 作为参数传递:
app.use(morgan('tiny'));
现在,运行 express 应用程序:
node index.js
打开您的网络浏览器并转到 http://localhost:3000。 您将在 Web 服务器中看到以下输出:
输出以以下格式显示:
morgan(':method :url :status :res[content-length] - :response-time ms')
通过创建我们自己的令牌来自定义日志格式
morgan 中的标记是在 : 符号之后标识的函数。 Morgan 允许您使用 .token() 方法创建自己的令牌。
.token() 方法接受一个类型或令牌的名称作为第一个参数,跟在一个回调函数之后。 每次使用令牌发生日志时,摩根都会运行回调函数。 作为中间件,morgan 将 req 和 res 对象用作参数。
在你的 index.js 文件中,使用 .token() 方法,并传递一个类型作为匿名函数后面的第一个参数:
import express from 'express';
import morgan from 'morgan';
const app=express();
morgan.token('host', function(req, res) {
return req.hostname;
});
// we are using the host parameter
app.use(morgan(':method :host :status :res[content-length] - :response-time ms'))
app.get("/", (req, res) => {
res.send("<h1>Hello world!</h1>");
})
;app.listen(3000,()=>{
console.log('Listening on port 3000...')
})
输出:
匿名回调函数将 req 对象上的主机名作为新令牌返回,以便在 Express 服务器中的 HTTP 请求中使用。
使用自定义参数设计令牌
要表示自定义参数,您可以使用方括号来定义传递给令牌的参数。 这将允许您的令牌接受其他参数。 在您的 index.js 文件中,将自定义参数应用于 :param 标记中的 morgan 格式字符串:
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];
});
morgan 调用中 :param 标记上的自定义参数 id 将在 .token() 方法之后的参数中包含该 ID。
结论
Morgan 在记录 HTTP 请求并以自定义格式字符串或预设更新精确状态和响应时间时允许灵活性。
关注七爪网,获取更多APP/小程序/网站源码资源!