@ fastify/ accepts-serializer (中文(简体) )
按照 Accept 头曰.
安装
npm i @fastify/accepts-serializer
兼容性
| 插件版本 | 快速化版本 |
|---|---|
>=6.x | ^5.x |
^5.x | ^4.x |
>=3.x <5.x | ^3.x |
^2.x | ^2.x |
^1.x | ^1.x |
请注意,如果一个快取版本没有支持,那么该插件的相应版本也一样 上表列出. 见 快速化 LTS 政策 更多细节.
使用量
const protobuf = require('protobufjs')
const YAML = require('yamljs')
const msgpack = require('msgpack5')()
const root = protobuf.loadSync('test/awesome.proto')
const AwesomeMessage = root.lookupType('awesomepackage.AwesomeMessage')
const fastify = require('fastify')()
// Global serializers
fastify.register(require('@fastify/accepts-serializer'), {
serializers: [
{
regex: /^application\/yaml$/,
serializer: body => YAML.stringify(body)
},
{
regex: /^application\/x-msgpack$/,
serializer: body => msgpack.encode(body)
}
],
default: 'application/yaml', // MIME type used if Accept header does not match anything
cacheSize: 100 // max number of Accept header combinations to cache (default: 100)
})
// Per-router serializers
const config = {
serializers: [
{
regex: /^application\/x-protobuf$/,
serializer: body => AwesomeMessage.encode(AwesomeMessage.create(body)).finish()
}
]
}
fastify.get('/request', { config }, function (req, reply) {
reply.send({pippo: 'pluto'})
})
选项
| 选项 | 类型 | 默认 | 说明 |
|---|---|---|---|
serializers | Array | [] | 序列器定义清单,每个定义都有 regex (单位:千美元) serializer 函数 |
default | string | —— 说 | 没有序列器匹配时使用的 MIME 类型 Accept 头曰. 如果省略,则未匹配的请求收到 406 回应 |
cacheSize | number | 100 | 最大差异数 Accept 标题组合到缓存 。 一旦达到限值, 将按 LRU 顺序删除条目 |
行为
对于每个路由,都定义了"序列器管理器"(Seristermanager),它同时具有每路由和全球序列器定义.
MIME 类型 application/json 总是由 fastify 如果没有为MIME类型注册序列器.
若无 default 密钥在配置中指定,所有请求未知 Accept 将用 406 个响应来回复头部(使用一个boom错误).
序列器选择结果由 Accept 使用 LRU 缓存的标题值 cacheSize。这可以防止攻击者控制的无约束内存增长 Accept 头相变相.
许可证
许可证根据 麻省理工学院。 。 。 .