Записать все запросы API в mongoDB, используя morgan и winston с помощью узла express - PullRequest
0 голосов
/ 08 февраля 2019

Я хочу зарегистрировать все запросы на MongoDB.Каждый документ должен иметь метод HTTP , лицо, сделавшее запрос, _id документа, который был обновлен / вставлен / получен, и время выполнения запроса.Может кто-нибудь помочь, пожалуйста?

1 Ответ

0 голосов
/ 19 февраля 2019

Я предлагаю использовать пакет 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;

В файле app.js требуется файл журнала, чтобы он применялся глобально:

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

app.use(logger.requestLog);

Существуют дополнительные параметры, которые можно включить, например, например: expressWinston.responseWhitelist.push ('body')

, которые будут обеспечивать тело ответа вobject.

Вы можете удалить транспорт для консоли, если не хотите видеть все запросы, я только добавил его, чтобы вы могли видеть объект, не заходя в базу данных каждый раз.

...