繁体   English   中英

AJV 不使用 compile 返回的函数验证我的身体

[英]AJV doesn't validate my body with the function returned by compile

我正在使用 express 构建一个 API,并使用 AJV 作为中间件来验证发送的正文。

我正在使用AJV 6.12.6

这是我在 JSON body-foobar.json中的模式:

{
  "type": "object",
  "properties": {
    "foobar": {
      "type": "string"
    }
  },
  "required": ["foobar"]
}

这里我使用中间件的方式:

const validator = require('../../middleware/validator')
const schema = require('../../middleware/schema/body-foobar.json')
...

router.post('/foo', validator(schema, 'body'), post.handler)

最后是我的中间件:

const Ajv = require('ajv')


module.exports = (schema, data) => {
  const ajv = new Ajv()
  const validate = ajv.compile(schema)

  return (req, res, next) => {
    const validation = validate(schema, req[data])

    if (!validation) {
      return res.status(400).json({success: validation, error: validate.errors[0].message})
    }
    return next()
  }
}

使用此代码,AJV 永远不会验证我的身体并说foobar丢失了,但是如果我删除所需的参数它可以工作,但是如果我为参数foobar输入一个数字而不是字符串,它将验证我的身体......

为了使其按预期工作,我不必调用 compile 返回的函数,而是调用:

ajv.validate(schema, req[data])

这样,它使编译功能无用,并且我害怕性能(缓存,或为每个请求编译)。 我是不是用compile返回的函数弄错了? 我怎样才能让它以这种方式工作? 因为它以一种方式运行良好但另一种方式运行良好,这非常奇怪......

谢谢您的帮助

compile 返回的函数具有与ajv.validate不同的参数,无需指定架构。

我只需要调用: validate(req[data]它工作正常。

暂无
暂无

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

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