3

我正在使用morgan('dev')日志记录,但我想将此对象"GET /users/get 200 195.315 ms - 393"[在控制台日志中] 存储到数据库中。

喜欢

- method : get 
- endpoint : /users/get
- status : 200

我怎样才能得到这个对象?
如何爆炸并将数据插入数据库上面的字段(方法、端点、状态)?

4

2 回答 2

3

您可以创建一个小型中间件,该中间件将侦听Response的“完成”事件并将数据保存到数据库中:

app.use((req, res, next) => {
  const method = req.method;
  const endpoint = req.originalUrl;

  res.on('finish', () => {
   const status = res.status;
   saveRequestDataToDatabase(method, endpoint, status);
   next();
  });
});
于 2018-10-21T00:45:10.053 回答
0

已经有一些模块可以为已知存储提供流兼容接口,例如 Mongoose-Morgan,它允许您将 Mongoose 日志直接流式传输到 MongoDB。但是,如果您找不到与 morgan 兼容的模块,您可以简单地编写一个函数,该函数返回一个可写流并将信息发送到您需要的地方。 摩根 NPM 记录器 - 初学者指南

创建一个新的命名格式:

const morgan = require('morgan')
const Writable = require("stream").Writable
morgan.token("custom", "-method: :method -endpoint: :url -status: status")

按名称使用新格式:

 class MyStream extends Writable {
    write(line) {
    //here you send the log line to wherever you need
       console.log("Logger:: ", line)
    }
  }
  let writer = new MyStream()
 
 app.use(morgan(‘custom’, {stream: write}))
于 2021-07-20T14:52:44.020 回答