Je suis encore novice en la matière, mais je pense que vous pouvez facilement créer un nombre quelconque de modèles dynamiques par programme. Par exemple, au début, créez un script de démarrage à l'intérieur de votre boot
répertoire, ex : server\boot\dynamic-models.js
et ensuite créer un modèle dynamique en utilisant le code suivant :
const app = require('../server');
const dbDataSource = app.datasources.db;
const schema = {
"name": {
"type": "string",
"required": true
},
"email": {
"type": "string",
"required": true
}
};
const MyDynamicModel = dbDataSource.createModel('MyDynamicModel', schema);
app.model(MyDynamicModel);
Le site app
est exporté de projectroot/server/server.js
afin que vous puissiez l'exiger dans votre script.
De même, le schéma est facultatif (dans le cas de noSql/mongo). Une fois que vous avez créé les modèles dynamiques, vous pouvez visiter votre explorateur d'API et voir les modèles/endpoints créés dynamiquement.
Si vous avez plus de modèles à créer, il vous suffit de faire une boucle et de créer les modèles, par exemple :
const models = ['ModelOne', 'ModelTwo'];
// or export from other files and import those here, i.e:
// const schema = require('exported-from-another-file');
// const models = require('exported-from-another-file');
models.forEach(model => {
app.model(dbDataSource.createModel(model, schema));
});
Mise à jour : Un autre exemple de travail pour l'enregistrement dynamique de plusieurs modèles :
// project-root/common/dynamic/index.js
module.exports.schema = {
"name": {
"type": "string",
"required": true
},
"email": {
"type": "string",
"required": true
}
};
module.exports.models = [
'ModelOne',
'ModelTwo'
];
// project-root/server/boot/dynamic-models.js
const app = require('../server');
const dbDataSource = app.datasources.db;
const {schema, models} = require('../../common/dynamic');
models.forEach(
model => app.model(dbDataSource.createModel(model, schema))
);
Maintenant, pour ajouter un modèle dynamique utilisant le même schéma, il suffit d'ajouter un nom de modèle dans le tableau des modèles. Ceci est testé et fonctionne bien :