Sequelize 实践:使用 Morgan 进行日志输出

在前端开发中,使用 Sequelize 可以方便地处理数据库操作。而在数据操作过程中,我们通常需要进行日志输出来监测和记录操作状况,以确保系统运行正常。在这篇文章中,我们将探讨使用 Morgan 进行 Sequelize 日志输出的实践方法。

Morgan 简介

Morgan 是一个基于 Node.js 的日志中间件,可以方便地将请求和响应的数据进行记录和输出。Morgan 提供了多种格式化输出方式,包括自定义格式、Apache、Common Log Format 等等。

安装 Morgan

在使用 Morgan 之前,我们需要先安装它。可以通过 npm 进行安装:

使用 Morgan 进行日志输出

在使用 Sequelize 进行数据库操作时,可以通过使用 Morgan 进行日志输出。在对应的文件中引入 Morgan:

const morgan = require('morgan');

然后将 Morgan 中间件添加到应用程序中,用于记录请求和响应信息:

app.use(morgan('combined'));

其中,'combined' 参数表示输出 Morgan 中间件的默认格式。

在 Sequelize 数据库操作中,我们需要对请求进行拦截,以记录它们的状态和结果。可以使用 Morgan 的自定义格式来输出必要的信息。例如,下面演示了一个自定义格式的输出模板:

morgan.token('req', (req, res) => JSON.stringify(req.params));
morgan.token('res', (req, res) => JSON.stringify(res.body));
app.use(morgan(':method :url :status :res[content-length] - :response-time ms :req :res'));

在这个模板中,我们使用了 Morgan 的 token() 方法,定义了两个变量('req' 和 'res'),可以在模板中使用。其中,'req' 变量表示请求的参数,'res' 变量表示响应结果。我们将它们使用 JSON.stringify() 方法进行序列化,然后添加到输出模板中。

最后,我们需要将以上代码与 Sequelize 进行配合,使其能够完整记录数据库操作的过程和状态:

sequelize
  .authenticate()
  .then(() => {
    app.listen(port, () => {
      console.log(`App listening on port ${port}!`);
    });
  })
  .catch((err) => {
    console.error(`Unable to connect to the database: ${err}`);
  });

app.use(morgan((tokens, req, res) => {
  const logObj = {
    method: tokens.method(req, res),
    url: tokens.url(req, res),
    status: tokens.status(req, res),
    request: tokens.req(req, res),
    response: tokens.res(req, res),
    duration: parseFloat(tokens['response-time'](req, res).toFixed(2))
  }
  console.log(JSON.stringify(logObj));
}));

在这个例子中,我们在 Sequelize 的 authenticate() 方法中添加了 Morgan 代码。这样,无论数据库操作结果怎么样,我们都可以记录每次请求的完整过程和结果,以及请求和响应所花费的时间。

示例代码

下面是一个完整的、可运行的 Sequelize Morgan 示例代码。

const morgan = require('morgan');
const express = require('express');
const mysql = require('mysql2');
const Sequelize = require('sequelize');

const app = express();
const port = 3000;

app.use(express.json());

const sequelize = new Sequelize('testdb', 'root', '', {
    host: 'localhost',
    dialect: 'mysql'
});

app.use(morgan((tokens, req, res) => {
  const logObj = {
    method: tokens.method(req, res),
    url: tokens.url(req, res),
    status: tokens.status(req, res),
    request: tokens.req(req, res),
    response: tokens.res(req, res),
    duration: parseFloat(tokens['response-time'](req, res).toFixed(2))
  }
  console.log(JSON.stringify(logObj));
}));

sequelize
  .authenticate()
  .then(() => {
    console.log('Connection has been established successfully.');
    app.listen(port, () => {
      console.log(`App listening on port ${port}!`);
    });
  })
  .catch((err) => {
    console.error(`Unable to connect to the database: ${err}`);
  });

在这个示例代码中,我们使用了 Express、MySQL 和 Sequelize。首先定义了一个 express 实例和一个 Sequelize 实例,并引入 Morgan 中间件。然后调用了 Sequelize 的 authenticate() 方法进行数据库连接测试。

最后,在 app.use() 中添加了一个定制化的 Morgan 输出模板,用于记录每次请求和响应的信息。

总结

在 Sequelize 数据库操作中,使用 Morgan 进行日志输出可以方便地进行操作状态和结果的记录和监测。我们可以通过配置 Morgan 的自定义格式,以及搭配 Sequelize 的操作方法,完整记录数据库操作的过程和状态。

在实际的应用程序开发中,可以根据需要,选择使用不同的格式模板,以输出最佳的日志信息。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65910cdeeb4cecbf2d6429d1


纠错
反馈