You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否使用JOI验证Postman发送的octet-stream类型请求数据?

验证Octet-Stream类型请求体的方法(基于Joi)

Joi本身没有专门针对application/octet-stream二进制数据的内置验证规则,但可以结合框架的请求体配置+Joi自定义验证函数实现需求。结合你提供的Hapi风格代码,具体实现如下:

实现步骤与代码示例

options: {
    validate: {
        query: Joi.object({
            marketCode: Joi.string().required()
        }),
        // 对二进制请求体做自定义验证
        payload: Joi.any()
            .custom((value, helpers) => {
                // 确保传入的是Buffer类型
                if (!Buffer.isBuffer(value)) {
                    return helpers.error('any.invalid', { message: '请求体必须为二进制数据' });
                }

                // 这里添加你的业务验证逻辑,比如:
                // 1. 验证数据最小长度
                if (value.length < 8) {
                    return helpers.error('any.tooSmall', { limit: 8, message: '二进制数据长度不能小于8字节' });
                }
                // 2. 验证特定字节标识(比如开头必须是0xAB 0xCD)
                if (value[0] !== 0xAB || value[1] !== 0xCD) {
                    return helpers.error('any.invalidFormat', { message: '二进制数据格式不符合要求' });
                }
                // 3. 其他校验:校验和、特定结构解析等

                return value;
            })
            .required(),
        // 关键配置:禁止框架自动解析请求体,保留原始Buffer
        options: {
            payload: {
                parse: false,
                // 仅允许application/octet-stream类型的请求
                allow: 'application/octet-stream'
            }
        }
    }
}

核心要点说明

  • options.payload.parse: false:阻止框架自动解析请求体,直接将二进制数据以Buffer类型传递给Joi的验证函数。
  • allow: 'application/octet-stream':限制请求的Content-Type必须为该类型,避免其他格式的请求进入验证逻辑。
  • 自定义验证函数:可以根据业务需求对Buffer做任意校验,比如长度检查、字节特征匹配、甚至解析二进制结构验证字段合法性等。

如果是在非Hapi环境中使用Joi,核心逻辑一致:获取到二进制Buffer后,通过Joi.any().custom()编写自定义校验规则即可。

内容的提问来源于stack exchange,提问作者Hanu Skumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 04:51:12