繁体   English   中英

有没有一种方法可以在嵌套有效负载上使用 JOI 验证未知密钥?

[英]Is there's a way to validate unknown keys with JOI on nested payloads?

我有一个使用 Joi 验证传入请求的中间件。

export default (schema: any) => async (req: Request, res: Response, next: NextFunction) => {
  try {
    const validation = schema.validate(req, { abortEarly: false })

    if (validation.error) throw validation.error

    return next()
  } catch (error) {
    return res.status(400).json({ error: error.details })
  }
}

为了测试,提议,我的架构如下

const schema = Joi.object({
  headers: Joi.object()
    .keys({
      page: Joi.string().required()
    })
    .unknown(true)
    .label('headers'),
  body: Joi.object({
    page: Joi.string().required()
  })
})

我正在用 Postman 测试这个 function。当我不发送 header 时,它失败但显示以下错误:

  • '用户代理':'PostmanRuntime/7.29.0'
  • 接受:' / ',
  • 'accept-encoding': 'gzip, deflate, br',
  • 连接:'保持活动'

我希望能够仅验证模式中的“页面”字段,而忽略上面的任何其他字段。

更改您的验证并将 stripUnknown 选项添加为 true:

const validation = schema.validate(req, { abortEarly: false, stripUnknown:true })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM