如何在另一个变量或函数中使用 Morgan 记录器令牌的值?

How to use Morgan logger token's value in another variable or functions?

我对 Javascript 和 NodeJS 比较陌生。
我正在尝试将 Morgan 与 Express.js 一起使用。我已经阅读了有关它的文档 here。有什么方法可以重用预定义标记中的 return 值吗?

根据文档,您可以使用如下内容:

let express = require('express');
let logger = require('morgan');

let app = express();

app.use(logger(function (tokens, req, res) {
  return [
    tokens.method(req, res),
    tokens.url(req, res),
    tokens.status(req, res),
    tokens.res(req, res, 'content-length'), '-',
    tokens['response-time'](req, res), 'ms'
  ].join(' ')
}));

我们可以使用令牌的值吗?例如,另一个函数中响应时间的值?

tokens['response-time'](req, res) //Use the value of this in another function

我希望能够将从收到请求到将响应发送回客户端所经过的时间日志保存到我的数据库中。有没有关于这个的 solution/suggestion?

我希望这不是使用正确方法的过时答案。

你的做法是对的。你可以调用中间件里面的函数,

这里我创建其他-function.js

module.exports = (responseTime) => {
    console.log('Hi there, my response time is '+responseTime+' ms')
}

和我的app.js

let express = require('express');
let logger = require('morgan');
let otherFunction = require('./other-function')

let app = express();

app.use(logger(function (tokens, req, res) {
  otherFunction(tokens['response-time'](req, res))
  return [
    tokens.method(req, res),
    tokens.url(req, res),
    tokens.status(req, res),
    tokens.res(req, res, 'content-length'), '-',
    tokens['response-time'](req, res), 'ms'
  ].join(' ')
}));

所以输出看起来像这样

Hi there, my response time is 4.566 ms
GET / 404 139 - 4.566 ms

希望这对您有所帮助。