Tengo una API que usa express, mongodb y uso la validación AJV para validar las solicitudes entrantes.
//JSONSchema var recordJsonSchema = { type: "object", properties: { name: { type: "string" }, idNumber: { type: "number" }, content: { type: "string" } }, required: ['name','idNumber'] }Y usaría este esquema JSON para validar las solicitudes entrantes así.
app.post('/record', (req,res) => { let errors = ajv.inspect(req.body, recordJsonSchema) return errors ? res.send(errors) : res.send(this.handler(req)); })Esto funciona bien y es muy rápido. También me gusta JsonSchema porque sigue los estándares de OpenAPI.
Desafortunadamente, para leer/escribir en mongo a través de mongoose, también necesito crear un MongoSchema para Record. Son muy similares pero un poco diferentes en la forma en que manejan los campos obligatorios, etc.
var recordSchema = new Schema({ name: { type: "string", required: true }, idNumber: { type: "number", required: true }, content: { type: "string" } })Entonces, para mi modelo de Record, ahora tengo dos esquemas. Uno para JSONschema y otro para manejar lecturas/escrituras de Mongo.
Estoy buscando una forma de cortar MongoSchema, ¿alguna sugerencia?
Tal vez esto, parece que importa su esquema ajv de la entrada y lo coloca en el esquema de mangosta. https://www.npmjs.com/package/mongoose-ajv-plugin
Me he enfrentado al mismo problema. Creo que en el nuevo mongo 4.4 podemos cargar el esquema ajv directamente en mongodb https://docs.mongodb.com/manual/reference/operator/query/jsonSchema/