【问题标题】:How to access all response times on every route in Express 4+?如何访问 Express 4+ 中每条路线的所有响应时间?
【发布时间】:2015-07-13 04:41:46
【问题描述】:

我正在努力将应用程序级别的响应时间数据传递给我的 Express 应用程序中的每条路线。我已经用谷歌搜索和谷歌搜索,但一切都回来了,建议将new Date() 扔到 API 调用中,这很糟糕,或者 Express response-time 包(包括这里的许多结果)。虽然我确信它很棒,但我不明白它有什么用途,除了添加一个标题,看看我如何在浏览器的开发工具中获得响应时间。

想要做的是在每条路由上将所有响应时间数据从服务器访问到视图中。

Express 已经提供一些请求数据,但不是全部。我似乎无法访问所有回复。当我加载一个基本页面时,我的终端看起来像这样,即使我在页面上除了一个 CSS 文件之外还有 6 个图像。

GET / 200 64.439 ms - 1663
GET /styles/index.css 200 36.582 ms - 2035

如果我使用响应时间包,我似乎无法访问 'X-Response-time' 标头。 req.headers 似乎只返回所有标头的子集,类似于上面提到的 Express 流量输出。

也许我只是很密集,但即使响应时间包的文档也提到了如何configure it with Express,但我仍然不明白它应该添加什么或如何在我的控制台之外访问它.

创建一个新的中间件,用于记录请求的响应时间,并将其提供给您自己的函数 fn。 fn 参数将作为 fn(req, res, time) 调用,其中 time 是以毫秒为单位的数字。

【问题讨论】:

    标签: node.js performance express


    【解决方案1】:

    你不能这样做吗:

    var responseTime = require('response-time')
    app.use(responseTime(function(req, res, time) {
        res.header('X-Response-Time', time);
    }));
    

    现在下面的每条路由都会有一个响应时间标头。

    【讨论】:

    • 我很乐意扩展这个答案......也许我误解了这个问题?
    • 重新阅读。我设置标题没有问题。这正是响应时间模块所做的。我想获取这些数据并将其注入到视图中。
    • 另外,这也行不通。它总是返回undefined
    • 由于您有标题,您可以将响应时间注入客户端的视图中。这是一个可以接受的选择吗?您是否在客户端使用任何特定框架? (例如,角度、主干等?)
    【解决方案2】:

    response-time 包将在您send 请求的同时添加X-Response-Time 标头:

    app.use(responseTime());
    app.get('/', function(req, res) {
    console.log(res.get('X-Response-Time')); // undefined
        res.send('Hello');
        console.log(res.get('X-Response-Time')); // 3.720ms
    });
    

    它通过侦听何时将要写入标头(例如,当即将发送请求时),并在之前添加响应时间(使用 npm 上的 on-headers 包)来做到这一点。

    听起来您想要做的是记录响应时间,然后将其设置为res.locals,以便您可以在视图中呈现它。

    我已经尝试使用on-headers 包在res.locals 中设置响应时间,但我认为到那时写响应肯定为时已晚......也许这是正确的道路?抱歉,我现在没有更多时间玩了:(

    【讨论】:

      猜你喜欢
      • 2015-12-10
      • 2015-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      • 2022-01-24
      • 2018-12-24
      相关资源
      最近更新 更多