使用 morgan 和 winston 和 node express 将所有 API 请求记录到 mongoDB

O'D*_*ett 4 mongodb express winston morgan

我想将所有请求记录到MongoDB. 每个文档都应该有HTTP 方法、发出请求的人、更新/插入/检索的文档的 _id 以及发出请求的时间。有人可以帮忙吗?

sup*_*oop 7

我建议使用express-winston包。请参阅文档链接。安装包 npm i express-winston 后,创建中间件名称 logger.js(或任何您喜欢的名称)。复制下面的代码

const expressWinston = require('express-winston');

const requestLog = expressWinston.logger({
  transports: [
    new winston.transports.Console({
      format: winston.format.json({
        space: 2
      })
    }),
    new winston.transports.MongoDB({
      db: 'localhost:27001', //Your Db connection
      options: {
        useNewUrlParser: true,
        poolSize: 2,
        autoReconnect: true
      }
    })
  ],
  meta: true,
  msg: "Request: HTTP {{req.method}} {{req.url}}; Username: {{req.user.preferred_username}}; ipAddress {{req.connection.remoteAddress}}",
  requestWhitelist: [
    "url",
    "method",
    "httpVersion",
    "originalUrl",
    "query",
    "body"
  ]
});

exports.requestLog = requestLog;
Run Code Online (Sandbox Code Playgroud)

在您的 app.js 文件中,需要记录器文件,以便全局应用:

const logger = require('../middleware/logger');
const express = require('express');
const app = express();

app.use(logger.requestLog);
Run Code Online (Sandbox Code Playgroud)

您可以包含其他选项,例如: expressWinston.responseWhitelist.push('body')

这将在对象中提供响应主体。

如果您不想看到所有请求,您可以删除控制台的传输,我只是添加了它,这样您就可以看到对象而无需每次都进入数据库。