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}' }
我正在使用带有内置 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}' }