- 服务器 Server
- server([options])
- Server options
- 服务器属性 Server properties
- server.auth.default(options)
- server.auth.scheme(name, scheme)
- server.auth.strategy(name, scheme, [options])
- await server.auth.test(strategy, request)
- await server.auth.verify(request)
- server.bind(context)
- server.cache(options)
- await server.cache.provision(options)
- server.control(server)
- server.decoder(encoding, decoder)
- server.decorate(type, property, method, [options])
- server.dependency(dependencies, [after])
- server.encoder(encoding, encoder)
- server.event(events)
- await server.events.emit(criteria, data)
- server.events.on(criteria, listener)
- server.events.once(criteria, listener)
- await server.events.once(criteria)
- server.expose(key, value)
- server.expose(obj)
- server.ext(events)
- server.ext(event, method, [options])
- await server.initialize()
- await server.inject(options)
- server.log(tags, [data, [timestamp]])
- server.lookup(id)
- server.match(method, path, [host])
- server.method(name, method, [options])
- server.method(methods)
- server.path(relativeTo)
- await server.register(plugins, [options])
- server.route(route)
- server.rules(processor, [options])
- await server.start()
- server.state(name, [options])
- server.states.add(name, [options])
- await server.states.format(cookies)
- await server.states.parse(header)
- await server.stop([options])
- server.table([host])
- Route options
- route.options.app
- route.options.auth
- route.options.bind
- route.options.cache
- route.options.compression
- route.options.cors
- route.options.description
- route.options.ext
- route.options.files
- route.options.handler
- route.options.id
- route.options.isInternal
- route.options.json
- route.options.jsonp
- route.options.log
- route.options.notes
- route.options.payload
- route.options.plugins
- route.options.pre
- route.options.response
- route.options.rules
- route.options.security
- route.options.state
- route.options.tags
- route.options.timeout
- route.options.validate
- Request lifecycle
- 请求
- 插件
服务器属性 Server properties
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.response
为 null
)。 每个请求发出一个事件。 '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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论