- 服务器 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.state(name, [options])
HTTP state management 使用客户端 cookie 在多个请求中保持状态。 注册 cookie 定义,如下:
name
- cookie 名称字符串。options
- 是可选的 cookie 设置:ttl
- 以毫秒为单位的生存时间(time-to-live) 默认为null
(session 生命周期 - 浏览器关闭时会删除 cookie).isSecure
- 设置 'Secure' 标识. 默认为true
.isHttpOnly
- 设置 'HttpOnly' 标识. 默认为true
.isSameSite
- 设置 'SameSite' flag . 该值必须是其中之一:false
- 没有标识。'Strict'
- 设置值为'Strict'
(这是默认值).'Lax'
- 设置值为'Lax'
.
path
- path 范围. 默认为null
(没有 path).domain
- domain 范围. 默认为null
(没有 domain).autoValue
- 如果存在并且未从客户端接收 cookie 或由路由处理程序显式设置, cookie 将自动添加到具有提供值的响应中。 该值可以是具有签名async function(request)
的函数,其中:request
- request object .
encoding
- 编码在序列化之前对提供的值执行 encode。 选项包括:'none'
- 不 encoding. 使用时,cookie 值必须是字符串。这是默认值。'base64'
- 字符串值使用 Base64 编码。'base64json'
- 对象值是 JSON 字符串化,然后使用 Base64 编码。'form'
- 使用 x-www-form-urlencoded 方法对对象值进行编码。'iron'
- 加密和签名值使用 iron .
sign
- 用于计算用于 cookie 完整性验证的 HMAC 的对象。这不提供隐私, 只是意味着验证 cookie 值是由服务器生成的。 使用'iron'
编码时冗余。 选项包括:integrity
- 算法选项. 默认为require('iron').defaults.integrity
.password
- 用于 HMAC 密钥生成的密码(长度必须至少为 32 个字符)。
password
- 用于'iron'
编码的密码(必须至少 32 个字符)。iron
-'iron'
编码的选项. 默认为require('iron').defaults
.ignoreErrors
- 如果true
, 错误被忽略并被视为缺少 cookie。clearInvalid
- 如果true
, 自动指示客户端删除无效的 cookie。 默认为false
.strictHeader
- 如果false
, 允许任何 cookie 值,包括违反 RFC 6265 的值. 默认为true
.passThrough
- 用于代理插件 (例如 h2o2 ).
返回值: none.
State 默认可以通过 server.options.state 配置选项修改.
const Hapi = require('hapi'); const server = Hapi.server({ port: 80 }); // Set cookie definition server.state('session', { ttl: 24 * 60 * 60 * 1000, // One day isSecure: true, path: '/', encoding: 'base64json' }); // Set state in route handler const handler = function (request, h) { let session = request.state.session; if (!session) { session = { user: 'joe' }; } session.last = Date.now(); return h.response('Success').state('session', session); };
注册的 cookie 在收到时会自动解析。 解析规则取决于路由 state.parse
配置。 如果传入的已注册 cookie 无法解析,它不会包含在 request.state
中, 无论 state.failAction
的设置. 当 state.failAction
设置为 'log'
并且接收到不可用的 cookies 时, 服务器将触发 'request'
event . 要捕获这些错误,请在 channels 'internal'
上注册 'request'
事件,并过滤 'error'
和 'state'
标签:
const Hapi = require('hapi'); const server = Hapi.server({ port: 80 }); server.events.on({ name: 'request', channels: 'internal' }, (request, event, tags) => { if (tags.error && tags.state) { console.error(event); } });
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论