1

我对 Javascript 和 NodeJS 比较陌生。
我正在尝试将 Morgan 与 Express.js 一起使用。我在这里阅读了有关它的文档。有没有办法重用预定义令牌的返回值?

从文档中可以看出,您可以使用以下内容:

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

我希望能够保存从收到请求到将响应发送回客户端到我的数据库中所经过的时间日志。对此有什么解决方案/建议吗?

4

1 回答 1

0

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

你的方法是对的。您可以只调用中间件内部的函数,

在这里我创建 other-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

希望这可以帮助。

于 2020-04-28T04:28:52.027 回答