Fastify JSON 模式默认值为 `null`

Fastify JSON Schema Default Value of `null`

我正在使用带有内置 AJV JSON 模式验证器的 Fastify v2。我正在从另一项服务中提取一些数据,有时字段存在,有时不存在。很好,但是如果该字段未定义,我想将其默认为 null 而不是保留它未定义,因为我依赖于存在的对象的键。

示例:

module.exports = {
  $id: "transaction",
  type: "object",
  required: [
    "txnDate",
  ],
  properties: {
    txnDate: {type: ["integer", "null"], minimum: 0, default: null},
  },
};

当我尝试以这种方式设置默认值时,Fastify 抛出 TypeError: Cannot use 'in' operator to search for 'anyOf' in null。有没有办法使用 AJV 在 Fastify 中获得我想要的行为?

你可以尝试使用 Fastify 2.7.1 的这个工作片段,因为 nullable 支持感谢 AJV:

const Fastify = require('fastify')
const fastify = Fastify({ logger: false })
fastify.post('/', {
    schema: {
        body: {
            $id: "transaction",
            type: "object",
            required: ["txnDate"],
            properties: {
                txnDate: { type: 'number', nullable: true, minimum: 0, default: null },
            },
        }
    }
}, (req, res) => { res.send(req.body) })

fastify.inject({
    method: 'POST',
    url: '/',
    payload: {}
}, (err, res) => {
    console.log({ err, res: res.payload });
})

将打印出:

{ err: null, res: '{"txnDate":null}' }