使用 trim 固定模式验证
fastify schema validation with trim
我写了一个schema如下
input: {
type: "string",
allOf: [
{
transform: [
"trim"
]
},
{
minLength: 1
}
],
transform: ["trim"],
trim: true,
description: "Input",
minLength: 1,
maxLength: 3
}
我想完成两件事 - 我想 trim 输入并且我想验证 trimmed 输入的 minLength = 1。
我尝试了为此遇到的所有不同配置,但到目前为止,其中 none 个都有效。我使用的是 fastify 版本 3.0.0,我相信它使用 ajv 验证器来进行转换和验证。验证部分正在运行,但是 trim 没有发生。
transform
不是标准的 json-schema 功能。
因此您需要配置 ajv
才能使其正常工作:
注意 allOf
数组是顺序执行的,因此如果您将 min/max
关键字移动到根文档,空格将被计算!
const Fastify = require('fastify')
const fastify = Fastify({
logger: true,
ajv: {
plugins: [
[require('ajv-keywords'), ['transform']]
]
}
})
fastify.post('/', {
handler: async (req) => { return req.body },
schema: {
body: {
type: 'object',
properties: {
input: {
type: 'string',
allOf: [
{ transform: ['trim'] },
{ minLength: 1 },
{ maxLength: 3 }
]
}
}
}
}
})
fastify.inject({
method: 'POST',
url: '/',
payload: {
input: ' foo '
}
}, (_, res) => {
console.log(res.payload);
})
使用下面的 cmd
安装 ajv-keywords
npm i ajv-keywords
在代码中导入'ajvKeywords'如下
import ajvKeywords from 'ajv-keywords'
将 ajv 实例传递给 ajvKeyword
const ajv = new Ajv({
useDefaults: true,
})
ajvKeywords(ajv, ['transform'])
并在架构中使用如下
schema: {
body: {
type: 'object',
properties: {
input: {
type: 'string',
transform: ['trim'],
allOf: [
{ transform: ['trim'] },
{ minLength: 1 },
{ maxLength: 3 }
]
}
}
}
}
}
我写了一个schema如下
input: {
type: "string",
allOf: [
{
transform: [
"trim"
]
},
{
minLength: 1
}
],
transform: ["trim"],
trim: true,
description: "Input",
minLength: 1,
maxLength: 3
}
我想完成两件事 - 我想 trim 输入并且我想验证 trimmed 输入的 minLength = 1。 我尝试了为此遇到的所有不同配置,但到目前为止,其中 none 个都有效。我使用的是 fastify 版本 3.0.0,我相信它使用 ajv 验证器来进行转换和验证。验证部分正在运行,但是 trim 没有发生。
transform
不是标准的 json-schema 功能。
因此您需要配置 ajv
才能使其正常工作:
注意 allOf
数组是顺序执行的,因此如果您将 min/max
关键字移动到根文档,空格将被计算!
const Fastify = require('fastify')
const fastify = Fastify({
logger: true,
ajv: {
plugins: [
[require('ajv-keywords'), ['transform']]
]
}
})
fastify.post('/', {
handler: async (req) => { return req.body },
schema: {
body: {
type: 'object',
properties: {
input: {
type: 'string',
allOf: [
{ transform: ['trim'] },
{ minLength: 1 },
{ maxLength: 3 }
]
}
}
}
}
})
fastify.inject({
method: 'POST',
url: '/',
payload: {
input: ' foo '
}
}, (_, res) => {
console.log(res.payload);
})
使用下面的 cmd
安装 ajv-keywordsnpm i ajv-keywords
在代码中导入'ajvKeywords'如下
import ajvKeywords from 'ajv-keywords'
将 ajv 实例传递给 ajvKeyword
const ajv = new Ajv({
useDefaults: true,
})
ajvKeywords(ajv, ['transform'])
并在架构中使用如下
schema: {
body: {
type: 'object',
properties: {
input: {
type: 'string',
transform: ['trim'],
allOf: [
{ transform: ['trim'] },
{ minLength: 1 },
{ maxLength: 3 }
]
}
}
}
}
}