json-schema 中的映射值

Mapping values in json-schema

因此 JSON 架构由 Fastify 团队定义 here and I'm particularly using fluent-json-schema 实现。

我在移植到 Fastify 的 Express 应用程序中使用 Joi 进行验证。

我对复选框和选择单选输入进行了大量验证。我想知道如何将两个布尔值分配给任意字符串值

// So this is possible in Joi but not in `fluent-json-schema`
S.boolean().truthy('on').falsy('off').default(false)

不仅对于布尔值,如果能够映射值会很好,因为这在前端和后端架构中非常方便。

我设法使用 preValidation 回调映射值。

function prevalidation_1(request, reply, done) {
    request.body = Object.fromEntries(
        Object.keys(request.body).map((key) => {
            if(key === 'exact') {
                const isTrue = request.body[key] == 'on' ? true : false
                return [key, isTrue]
            } else {
                return [key, request.body[key]]
            }
        })
    )
    done()
}
// Example secured route
fastify.route({
    method: 'POST',
    url: '/upload',
    preHandler: fastify.auth([
        fastify.verifyJWT,
    ]),
    preValidation: prevalidation_1,
    handler: (req, reply) => {
        req.log.info('Upload route')
        const { body } = req
        reply.send({ hello: body.exact })
    }
})