![](/img/trans.png)
[英]ajv addSchema and validate the data doesn't fail with intentional test to fail
[英]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.