0

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

例子:

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

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

4

1 回答 1

2

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

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 });
})

将打印出:

{错误:null,res:'{“txnDate”:null}'}

于 2019-08-27T13:36:34.247 回答