使用 Node 和 hapijs/joi 对多值 HTTP header 进行验证
Validation on multivalue HTTP header with Node and hapijs/joi
我正在尝试在 Hapijs 框架上用 Node.js 编写的 REST api 中验证接受 header。当我从 Firefox 请求我的资源时,它创建了一个带有以下接受 header:
的请求
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
现在我的路线是这样的:
{
method: 'GET',
path: '/cities',
handler: function (req, reply) {
... handler ...
},
config: {
validate: {
headers: Joi.object({
'accept': Joi.any().valid('application/json').required()
}).unknown()
}
}
}
现在我发现 Joi 不会将 accept header 拆分成某种数组。我可以使用一些正则表达式,例如:
Joi.string().regex(/(application\/json)/)
我想知道除了正则表达式之外是否还有其他方法可以验证此类多值 header,尤其是当 api 版本控制发挥作用时。有人有想法吗?
我不认为只要 Accept
header 是一个字符串。
我认为您使用 regex()
的方法是正确的。
请注意,Accept
的大小写需要在您的架构和 header 属性之间保持一致。
我正在尝试在 Hapijs 框架上用 Node.js 编写的 REST api 中验证接受 header。当我从 Firefox 请求我的资源时,它创建了一个带有以下接受 header:
的请求Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
现在我的路线是这样的:
{
method: 'GET',
path: '/cities',
handler: function (req, reply) {
... handler ...
},
config: {
validate: {
headers: Joi.object({
'accept': Joi.any().valid('application/json').required()
}).unknown()
}
}
}
现在我发现 Joi 不会将 accept header 拆分成某种数组。我可以使用一些正则表达式,例如:
Joi.string().regex(/(application\/json)/)
我想知道除了正则表达式之外是否还有其他方法可以验证此类多值 header,尤其是当 api 版本控制发挥作用时。有人有想法吗?
我不认为只要 Accept
header 是一个字符串。
我认为您使用 regex()
的方法是正确的。
请注意,Accept
的大小写需要在您的架构和 header 属性之间保持一致。