我对nodejs使用npm jsonschema
模块,我非常简单的json模式看起来像这样:
"title": "ticket",
"type": "object",
"properties": {
"_id" : {"type": "string"},
"created": {"type": "string", "format": "date-time"}
},
"additionalProperties" : false
我通过这个模式验证的数据存储在mongodb中。问题是created属性有一个带有expireAfterSeconds的索引,可以在一段时间后自动删除这些记录。
现在我有以下问题。如果我发送一个字符串(不管根据json规范它是有效的还是无效的),数据库中的文档也创建了类型为string的属性,因为mongo db是无模式的,并且我不能将该属性预定义为date类型。例如,如果我将带有created属性的数据作为mongo ISO字符串发送,尽管2017-08-15T14:34:18.839Z
日期属性看起来非常相似,但它们仍然是字符串。Ofc这打破了过期逻辑。
如果我为创建的属性发送带有实际日期的数据,JSON验证将失败,并显示
instance.created is not of a type(s) string
Ofc我可以将insert和update中的所有日期字段从验证字符串转换为date类型,但这是不够的,因为在读取时,我将具有真实日期类型的数据,这些数据在下一次更新时将无法通过验证。因此,我可以在每次从日期读取到字符串时都包含一个反向转换,但这个解决方案对我来说仍然不够好。
还有其他想法吗?
发布于 2018-08-23 03:58:52
不熟悉jsonschema,但如果您要使用ajv,则可以使用自定义关键字和验证,例如:
{
"type": "object",
"properties": {
"someDate": {
"instanceof": "Date"
}
}
}
https://stackoverflow.com/questions/45695312
复制相似问题