Hapi 和 Good 实现 HTTP 事件和指标记录

背景

在现代 Web 应用程序中,HTTP 事件和指标记录是一项至关重要的任务。在前端项目中,我们需要追踪下列指标:

  • 客户端浏览器类型和版本
  • 访问者的IP地址
  • 响应时间
  • HTTP状态码
  • 和其他信息

为了实现这些记录,开发者需要使用一个好的服务器框架和监控组件。在这篇文章中,我们将探讨如何使用 Hapi 和 Good 实现 HTTP 事件和指标记录。

Hapi

开发者们对于 Hapi 的印象通常是高度可扩展的、模块化的、具有良好的插件支持以及出色的 API 风格。Hapi 可以用于构建 Web 应用程序和 API。

这里,我们将讨论如何使用 Hapi 实现 HTTP 事件和指标记录。首先,我们需要用 npm 安装 Hapi。

npm install --save hapi

接下来,我们需要创建一个简单的 Hapi 服务器。

const Hapi = require('hapi');

const server = new Hapi.Server({
  port: 3000,
  host: 'localhost'
});

server.route({
  method: 'GET',
  path: '/',
  handler: (request, h) => {
    return 'Hello, World!';
  }
});

server.start().then(() => {
  console.log('Server running at:', server.info.uri);
});

这个简单的服务器将返回 Hello, World!,它监听在 localhost:3000 上。现在,我们需要添加 Good 插件来实现 HTTP 事件和指标记录。

Good

Good 是一个用于将 Hapi 事件和指标输出到多个目标(包括控制台、日志文件、InfluxDB、StatsD 等)的插件。我们可以用 npm 安装它。

npm install --save good

接下来,我们需要修改服务器代码。首先,我们需要加载 Good 日志记录器插件,它将输出日志消息到控制台。

const Good = require('good');

const server = new Hapi.Server({
  port: 3000,
  host: 'localhost'
});

server.route({
  method: 'GET',
  path: '/',
  handler: (request, h) => {
    return 'Hello, World!';
  }
});

server.register({
  plugin: Good,
  options: {
    reporters: {
      console: [{
        module: 'good-console'
      }, 'stdout']
    }
  }
}).then(() => {
  server.start().then(() => {
    console.log(`Server running at: ${server.info.uri}`);
  });
}).catch((error) => {
  console.error('Error:', error);
});

接下来,我们需要添加 Good 插件的配置选项。下面是一个示例配置:

{
  "reporters": {
    "console": [{
      "module": "good-squeeze",
      "name": "Squeeze",
      "args": [{
        "response": "*",
        "log": "*"
      }]
    }, {
      "module": "good-console"
    }, "stdout"]
  }
}

这个配置将输出所有的请求和响应事件以及服务器日志。Good 插件将这些事件和信息输出到控制台或其他目标上。

在提交请求之后,Good 将会返回一个包含请求ID的响应。请求ID可以用于检索该请求的详细信息。下面是一个示例响应:

{
  "request": {
    "method": "GET",
    "path": "/",
    "headers": {
      "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
      "connection": "keep-alive",
      "accept": "*/*",
      "accept-encoding": "gzip, deflate, br"
    },
    "body": null
  },
  "response": {
    "statusCode": 200,
    "payload": "Hello, World!",
    "headers": {}
  },
  "log": []
}

总结

在本文中,我们学习了如何使用 Hapi 和 Good 实现 HTTP 事件和指标记录。我们首先创建了一个简单的 Hapi 服务器,然后添加了 Good 插件以输出事件和指标。最后,我们学习了如何解析 Good 插件输出的请求ID以检索详细信息。

随着 Web 应用程序的复杂性不断增加,HTTP 事件和指标记录也变得越来越重要。通过使用 Hapi 和 Good,我们可以轻松地实现这些记录。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a090f5add4f0e0ff8d6bd0


纠错反馈