Преобразовать модель Sequelize в схему JSON для проверки ввода пользователя
Планирование использовать AJV для проверки пользовательских данных. AJV нужна модель данных JSON Schema для проверки пользовательских данных. Итак, нам нужно вывести схему JSON из модели Sequelize. Есть ли способ получить схему JSON из модели Sequelize программно?
1 ответ
Поздний ответ, но в итоге я создал схему sequelize-to-json, чтобы решить эту проблему для наших нужд.
Он предлагает больше настроек с точки зрения того, какие атрибуты вы включаете в свою схему, и добавляете виртуальные атрибуты, которые могут использоваться вашим методом создания или аналогичным.
пример
// assuming you have a user model with the properties
// name (string) and status (enum: real, imagined)
const schemaFactory = require('sequelize-to-json-schema');
const factory = new SchemaFactory({
customSchema: {
user: {
name: { description: "The user's name" },
status: { description: 'Was it all just a dream?' },
},
}
hrefBase: 'http://schema.example',
});
const schemaGenerator = factory.getSchemaGenerator(User);
const schema = schemaGenerator.getSchema();
// Results in
schema = {
{
title: 'User',
'$id': 'http://schema.example/user.json',
type: 'object',
'$schema': 'http://json-schema.org/draft-06/schema#',
properties: {
name: {
'$id': '/properties/fullname',
type: 'string',
examples: [],
title: 'Name',
description: "The user's name",
},
status: {
'$id': '/properties/status',
type: 'string',
examples: ['REAL', 'IMAGINED'],
enum: ['REAL', 'IMAGINED'],
title: 'Status',
description: 'Was it all just a dream?'
}
}
}
}
Замечания: sequelize-to-json-schema
генерирует схемы draft-06, чтобы использовать это с AJV, их README говорит, что вам нужно сделать:
ajv.addMetaSchema(require('ajv/lib/refs/json-schema-draft-06.json'));