【问题标题】:Retrieving res.json() data from same node application从同一节点应用程序检索 res.json() 数据
【发布时间】:2016-06-16 03:57:56
【问题描述】:

我目前正在使用node.jsexpress.js 开发API 服务器。我想知道每个 api 需要多长时间才能响应的信息。为此,我使用response-time 来获取时间。

app.use(responseTime(function(req, res, time) {
  var log = {
    "date" : new Date(),
    "os" : req.headers['user-agent'],                 
    "requestUrl" : req.originalUrl,
    "ipAddress" : req.ip,
    "requestMethod" : req.method,
    "statusCode" : res.statusCode,
    "statusMessage" : "",
    "timeTaken" : Math.floor(time),
    "data" : JSON.stringify(req.body)
  };
  // save log data
}));

对于每个 API 响应,我使用 json 方法来处理错误,即res.status(400).json({message: 'Something'})

如何在 responseTime 函数中检索该 json 错误消息?

【问题讨论】:

    标签: node.js express response-time


    【解决方案1】:

    不幸的是,我认为这个中间件是不可能的。 response-time 中间件在发送标头(using onHeaders)之前停止计时,我相信这是在响应对象上设置正文之前。我什至不确定是否在响应对象上设置了正文。

    您可以尝试将 mung 与 `response-time 结合使用?

    【讨论】:

      【解决方案2】:

      您不能这样访问的原因是因为响应主体从未在响应对象上设置。相反,它直接流式传输到客户端。因此,您必须手动将响应正文收集到响应对象中。

      最简单的解决方案是始终将正文(在您的情况下为错误 json)传递到响应对象内的自定义字段中。例如在您的路线中,添加如下内容:

      get('/myErrorRoute', function(req, res, next) {
        var errJson = {message: 'Something'};
        res.myCustomField = errJson;
        res.status(400).json(errJson);
      });
      

      然后像这样在你的中间件中访问它:

      app.use(responseTime(function(req, res, time) {
        var log = {
          "date" : new Date(),
          "os" : req.headers['user-agent'],                 
          "requestUrl" : req.originalUrl,
          "ipAddress" : req.ip,
          "requestMethod" : req.method,
          "statusCode" : res.statusCode,
          "statusMessage" : "",
          "timeTaken" : Math.floor(time),
          "data" : JSON.stringify(req.body)
        };
        // acces your custom field
        console.log(res.myCustomField);
      }));
      

      或者,如果你有胆量,可以修改 json() 方法来做到这一点。 example here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-26
        • 1970-01-01
        相关资源
        最近更新 更多