返回介绍

服务器属性 Server properties

发布于 2024-02-12 19:53:56 字数 15460 浏览 0 评论 0 收藏 0

server.app

访问: 读 / 写.

提供了一个安全的地方来存储特定于服务器的运行时应用程序数据,而不与框架内部潜在【potential】冲突。数据可以在任何服务器可用状态下被访问。初始化为空对象。

const server = Hapi.server();

server.app.key = 'value';

const handler = function (request, h) {

  return request.server.app.key;    // 'value'
};

server.auth.api

访问: 指定的认证策略【strategy】。

一个对象,其中每个键都是一个身份验证策略名称,值是公开【exposed】的策略 API。仅当身份验证方案【scheme】通过实现函数返回对象中的 api 键来公开 API 时才可用。

const server = Hapi.server({ port: 80 });

const scheme = function (server, options) {

  return {
    api: {
      settings: {
        x: 5
      }
    },
    authenticate: function (request, h) {

      const authorization = request.headers.authorization;
      if (!authorization) {
        throw Boom.unauthorized(null, 'Custom');
      }

      return h.authenticated({ credentials: { user: 'john' } });
    }
  };
};

server.auth.scheme('custom', scheme);
server.auth.strategy('default', 'custom');

console.log(server.auth.api.default.settings.x);  // 5

server.auth.settings.default

访问: 只读。

包含默认的身份认证配置,如果是默认的策略设置请通过 server.auth.default()

server.decorations

访问: 只读。

提供对已应用于各种框架接口修饰符的访问。对象不能直接被修改,但只能通过 server.decorate

包含:

  • request - 装饰 request object .
  • toolkit - 装饰 response toolkit .
  • server -装饰 server 对象.
const Hapi = require('hapi');
const server = Hapi.server({ port: 80 });

const success = function () {

  return this.response({ status: 'ok' });
};

server.decorate('toolkit', 'success', success);
console.log(server.decorations.toolkit);      // ['success']

server.events

访问: podium 公共接口.

服务器的事件触发器. 利用【Utilizes】 podium 支持的事件标准验证, �频道和过滤器。

使用下面方法与 server.events 进行交互:

  • server.event(events) - 注册应用事件.
  • server.events.emit(criteria, data) - 触发服务器事件.
  • server.events.on(criteria, listener) - 订阅服务器事件.
  • server.events.once(criteria, listener) - 订阅

其他方法包含: server.events.removeListener(name, listener) , server.events.removeAllListeners(name) , 和 server.events.hasListeners(name)

'log' Event

'log' 事件类型触发由框架生成的内部服务器事件,以及使用 server.log() 记录的应用程序事件

'log' 事件处理程序使用函数签名 function(event, tags) ,其中:

  • event - 具有以下属性的对象:

    • timestamp - 事件时间戳.
    • tags - 标识事件的标签数组 (例如 ['error', 'http'] ).
    • channel - 为内部生成的事件设置为 'internal' , 否则由 server.log() 生成 'app'
    • data - 特定事件的信息。 当指定事件数据并且不是错误时可用。错误通过 error 传递。
    • error - 与事件相关的错误对象(如果适用)。不能与 data 同时出现。
  • tags - 一个对象,其中每个 event.tag 是一个键,值为 true 。有助于快速识别【identification】事件

server.events.on('log', (event, tags) => {

  if (tags.error) {
    console.log(`Server error: ${event.error ? event.error.message : 'unknown'}`);
  }
});

内部生成的事件是 (由它们 tags 识别):

  • load - 由于 high load 服务器拒绝请求时记录当前服务器负载测量值。事件数据包含流程负载指标【metrics】。

  • connection client error - 从 HTTP 或 HTTPS 监听器收到的 clientError 事件。事件数据是收到的错误对象。

'request' Event

'request' 事件类型触发由框架生成的内部请求事件以及使用 request.log() 记录的应用程序事件。

'request' 事件处理程序使用函数签名 function(request, event, tags) 其中:

  • request - request object .

  • event - 具有以下属性的对象:

    • timestamp - 事件时间戳。
    • tags - 标识事件的标签数组 (例如 ['error', 'http'] ).
    • channel - 其中之一:
      • 'app' - server.log() 生成的事件.
      • 'error' - 每当请求的响应 500 时触发。
      • 'internal' - internally generated events.
    • request - request identifier .
    • data - 特定事件的信息。提供事件数据时可用且不是错误。 错误通过 error 传递。
    • error - 与事件相关的错误对象(如果适用)。 不能与 data 一起出现。
  • tags - 一个对象,其中每个 event.tag 是一个键,值为 true 。 有助于快速识别事件。

server.events.on('request', (request, event, tags) => {

  if (tags.error) {
    console.log(`Request ${event.request} error: ${event.error ? event.error.message : 'unknown'}`);
  }
});

仅监听一个频道, 使用事件的条件对象:

server.events.on({ name: 'request', channels: 'error' }, (request, event, tags) => {

  console.log(`Request ${event.request} failed`);
});

内部生成的事件 (由 tags 标识):

  • accept-encoding error - 收到的请求包含无效的 invalid Accept-Encoding header.
  • auth unauthenticated - 没有 authentication scheme 包含在请求中.
  • auth unauthenticated response {strategy} - 列出的身份验证策略返回了非错误响应 (例如 重定向到).
  • auth unauthenticated error {strategy} - 请求未能通过列出的身份验证策略(无效凭据)。
  • auth unauthenticated missing {strategy} - 请求未能通过列出的身份验证策略(未找到凭据)。
  • auth unauthenticated try {strategy} - 请求未能在 try 模式下通过列出的身份验证策略,并将继续。
  • auth scope error - 请求已通过身份验证但未能满足范围要求。
  • auth entity user error - 请求经过身份验证但在需要用户实体时包含应用程序实体。
  • auth entity app error - 请求经过身份验证但在需要应用程序实体时包含用户实体。
  • handler error - 路由处理程序返回错误。 包括执行持续时间和错误消息。
  • pre error - 执行 pre 方法并返回错误。 包括执行持续时间,分配键和错误。
  • internal error - 为请求分配了 HTTP 500 错误响应。
  • internal implementation error - 错误实现的 lifecycle method .
  • request abort error - 请求中止。
  • request closed error - 请求提前结束。
  • request error - 请求流发出错误。 包括错误。
  • request server timeout error - 请求花了太长时间才能由服务器处理。 包括超时配置值和持续时间。
  • state error - 该请求包含无效的 cookie。 包括 cookie 和错误详细信息。
  • state response error - 响应包括无效的 cookie,阻止生成有效的 header。 包括错误。
  • payload error - 处理请求有效负载失败。 包括错误。
  • response error - 无法将响应写入客户端。 包含错误。
  • response error close - 由于过早关闭连接而无法将响应写入客户端。
  • response error aborted - 由于过早中止连接而无法将响应写入客户端。
  • response error cleanup - 无法释放响应资源。
  • validation error {input} - 输入 (例如 payload, query, params, headers) 验证失败。 包含错误。
  • validation response error - 响应认证失败. 包含错误信息。

'response' Event

当响应被发送回客户端, 'response' 事件类型将被触发(或当客户端连接关闭并且没有响应发送,在这种情况下 request.responsenull )。 每个请求发出一个事件。 'response' 事件控制使用的函数签名 function(request) 如下:

  • request - the request object .
server.events.on('response', (request) => {

  console.log(`Response sent for request: ${request.info.id}`);
});

'route' Event

当通过 server.route() 添加路由时,会发出 'route' 事件类型。 'route' 事件处理程序使用函数签名 function(route) ,其中:

  • route - route information . 不得修改 route 对象
server.events.on('route', (route) => {

  console.log(`New route added: ${route.path}`);
});

'start' Event

使用 server.start() 启动服务器时会发出 'start' 事件类型。 'start' 事件处理程序使用函数签名 function()

server.events.on('start', () => {

  console.log('Server started');
});

'stop' Event

使用 server.stop() 停止服务器时会发出 'stop' 事件类型。 'stop' 事件处理程序使用函数签名 function()

server.events.on('stop', () => {

  console.log('Server stopped');
});

server.info

访问: 只读。

一个包含如下服务器信息的对象:

  • id - 唯一的服务器标识符 (使用格式 '{hostname}:{pid}:{now base36}').

  • created - 服务器创建时间戳。

  • started - 服务器启动时间戳(停止时为 0 )。

  • port - 连接端口基于以下规则:

    • 在服务器启动之前:配置的 port 值。
    • 服务器启动后:未配置端口或设置为 0 时分配的实际端口。
  • host - host 配置的值

  • address - 启动后连接绑定的活动 IP 地址。 在服务器启动或使用非 TCP 端口之前设置为 undefined (例如 UNIX domain socket).

  • protocol - 使用的协议:

    • 'http' - HTTP.
    • 'https' - HTTPS.
    • 'socket' - UNIX domain socket or Windows named pipe.
  • uri - 表示连接的字符串 (例如 'http://example.com:8080' 或 'socket:/unix/domain/socket/path'). 如果设置,则包含 uri 值, 否则根据可用设置构建。 如果 port 没有配置或设置为 0 , 在服务器启动之前, uri 将不包含端口组件。

const Hapi = require('hapi');
const server = Hapi.server({ port: 80 });

console.log(server.info.port);      // 80

server.listener

访问: 只读和监听公共接口。

node HTTP 服务器对象。

const Hapi = require('hapi');
const SocketIO = require('socket.io');

const server = Hapi.server({ port: 80 });

const io = SocketIO.listen(server.listener);
io.sockets.on('connection', (socket) => {

  socket.emit({ msg: 'welcome' });
});

server.load

访问: 只读。

包含流程负载指标的对象 (当 load.sampleInterval 已启用):

  • eventLoopDelay - 时间循环延迟毫秒.
  • heapUsed - V8 堆使用情况.
  • rss - RSS 内存使用情况.
const Hapi = require('hapi');
const server = Hapi.server({ load: { sampleInterval: 1000 } });

console.log(server.load.rss);

server.methods

访问: 只读。

服务器方法是在服务器中注册的功能,在整个应用程序中用作通用实用程序。 它们的优势在于能够将它们配置为使用内置缓存并在多个请求处理程序之间共享,而无需创建公共模块。

sever.methods 是一个对象,它提供对通过 server.method() 注册的方法的访问,其中每个服务器方法名称都是一个对象属性。

const Hapi = require('hapi');
const server = Hapi.server();

server.method('add', (a, b) => (a + b));
const result = server.methods.add(1, 2);  // 3

server.mime

访问: 只读且 mimos 公共接口。

提供对用于设置内容类型信息的服务器 MIME 数据库的访问。不能直接修改对象,只能通过 mime 服务器设置修改。

const Hapi = require('hapi');

const options = {
  mime: {
    override: {
      'node/module': {
        source: 'steve',
        compressible: false,
        extensions: ['node', 'module', 'npm'],
        type: 'node/module'
      }
    }
  }
};

const server = Hapi.server(options);
console.log(server.mime.path('code.js').type)    // 'application/javascript'
console.log(server.mime.path('file.npm').type)    // 'node/module'

server.plugins

访问: 读 / 写.

包含每个注册插件公开的值的对象,其中每个键是一个插件名称,值是每个插件使用 server.expose() 公开的属性. 插件可以直接或通过 server.expose() 方法设置 server.plugins[name] 对象的值

exports.plugin = {
  name: 'example',
  register: function (server, options) {

    server.expose('key', 'value');
    server.plugins.example.other = 'other';

    console.log(server.plugins.example.key);    // 'value'
    console.log(server.plugins.example.other);  // 'other'
  }
};

server.realm

访问: 只读。

realm 对象包含特定于每个插件或身份验证策略的沙盒服务器设置。 在注册插件或认证方案时, server 对象引用提供了一个特定于该注册的新 server.realm 容器。 它允许每个插件保持自己的设置,而不会泄漏并影响其他插件。

例如,插件可以为本地资源设置默认文件路径,而不会破坏其他插件的已配置路径。 当调用 server.bind() 时,会设置的现有 reaml 的 settings.bind 属性,然后由在同一级别添加的路由和扩展使用(服务器根目录或插件)。

server.realm 对象包含:

  • modifiers - 当服务器对象作为插件 register() 方法的参数提供时, modifiers 提供了通过 server.register() 方法传递的注册首选项,包括:

    • route - 路由偏好:

      • prefix - 从服务器调用 server.route() 时使用的路径路径前缀。 请注意,如果使用前缀并且路径路径设置为 '/' ,则生成的路径将不包括尾部斜杠。
      • vhost - 从服务器调用 server.route() 时使用的路由虚拟主机设置。
  • parent - 父服务器对象的 reaml,或根服务器的 null

  • plugin - 活动插件名称(如果在服务器根目录,则为空字符串)。

  • pluginOptions - 注册时传递的插件选项。

  • plugins - 特定于插件的状态,仅在共享相同活动状态的活动之间共享。 plugins 是一个对象,其中每个键都是一个插件名称,值是插件状态。

  • settings - 设置覆盖:

    • files.relativeTo
    • bind

server.realm 对象应该被认为是只读的,不能直接更改,除了 plugins 属性,可以由每个插件直接操作,在 plugins[name] 中设置它的属性。

exports.register = function (server, options) {

  console.log(server.realm.modifiers.route.prefix);
};

server.registrations

访问: 只读。

当前注册的插件的对象,其中每个 key 对应注册的插件名称,值是包含的对象:

  • version - 插件版本.
  • name - 插件名称.
  • options - (可选) 注册期间传递给插件的选项。

server.settings

访问: 只读。

应用默认值后的服务器配置对象。

const Hapi = require('hapi');
const server = Hapi.server({
  app: {
    key: 'value'
  }
});

console.log(server.settings.app);   // { key: 'value' }

server.states

访问: 只读和 statehood 公共接口.

服务器 cookies 管理器.

server.states.settings

访问: 只读。

服务器 cookies 管理器设置. 设置基于 server.options.state 中配置的值.

server.states.cookies

访问: 只读。

包含通过 server.state() 添加的每个 cookie 的配置的对象,其中每个 key 是 cookie 名称,值是配置对象。

server.states.names

访问: 只读。

包含所有已配置【configured】 cookie 的名称的数组。

server.type

访问: 只读。

一个字符串,标明【indicating】监听类型,其中:

  • 'socket' - UNIX domain socket or Windows named pipe.
  • 'tcp' - an HTTP listener.

server.version

访问: 只读。

hapi 版本号

const Hapi = require('hapi');
const server = Hapi.server();

console.log(server.version);    // '17.0.0'

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文