环回也可以创建一个构建json模型的数据库结构

环回也可以创建一个构建json模型的数据库结构,json,node.js,postgresql,loopbackjs,strongloop,Json,Node.js,Postgresql,Loopbackjs,Strongloop,我有一个大型数据库的书面规范,该数据库将托管在postgresql中,并用作backloop nodejs api实现的数据源。 问题是,说明书不是由机器直接编写的,所以我必须自己创建模型和结构。 我最近才开始使用loopback,以前我主要使用django。从我看到的情况来看,我认为适合我的方法是dataSource.createModel,但该方法不会在common/model文件夹中创建json文件,因此它实际上不适用于api 有没有办法在数据库和api注册表中构建模型? 这是我目前的代码

我有一个大型数据库的书面规范,该数据库将托管在postgresql中,并用作backloop nodejs api实现的数据源。 问题是,说明书不是由机器直接编写的,所以我必须自己创建模型和结构。 我最近才开始使用loopback,以前我主要使用django。从我看到的情况来看,我认为适合我的方法是
dataSource.createModel
,但该方法不会在
common/model
文件夹中创建
json
文件,因此它实际上不适用于api

有没有办法在数据库和api注册表中构建模型? 这是我目前的代码:(

PS我的模型将有外键和这样的关系

{
  "name": "Order",
  "base": "PersistedModel",
  "properties": {
    "description": {
      "type": "string"
    },
    "total": {
      "type": "number"
    }
  },
  "validations": [],
  "relations": {
    "customer": {
      "type": "belongsTo",
      "model": "Customer",
      "foreignKey": ""
    }
  },
  "acls": [],
  "methods": []
}

我制作了一个脚本,可以从数据库创建模型,并自动在common/models中创建.json文件。该脚本还公开了Explorer API中的API。希望这是您需要的。还提供了要点

注意TODO的注释,您应该将其与您的项目相匹配

/**
*loopback-discover-database.js
*
*将此文件放在项目的根目录中,它应该可以工作。
*运行:node loopback-discover-database.js
*/
var fs=需要('fs');
var loopback=require(‘loopback’);
var commonFolder='./common';
var modelsFolder=commonFolder+'/models';
//TODO:如果需要,请更改为服务器文件夹的正确路径
var serverPath='./server/';
var modelConfig=require(serverPath+'modelConfig');
var dataSources=require(serverPath+‘dataSources’);
//TODO:dataSourceName应该是服务器/datasources.json中数据源的名称
var dataSourceName='dbname';
var ds=loopback.createDataSource('postgresql',dataSources[dataSourceName]);
initMain();
函数initMain(){
//检查是否存在通用/通用模型
//若并没有,那个么创建它们并从数据库构建模型
如果(!fs.existsSync(commonFolder)){
fs.mkdirSync(commonFolder);
}
如果(!fs.existsSync(modelsFolder)){
fs.mkdirSync(modelsFolder);
}
discoverAndCreate();
}
函数discoverAndCreate(回调){
//将打印数据库的架构
ds.DiscoveryModelDefinitions(函数(错误,模型){
models.forEach(函数(定义、索引、数组){
//def.name~模型名称
ds.discoverSchema(def.name,null,function(err,schema){
schema.name=schema.name.toLowerCase();
fs.writeFile('common/models/'+def.name+'.json',prettyJSON(模式),函数(err){
如果(错误)抛出错误;
log('已保存!');
//如果最后一个,则保存
if(index==array.length-1){
saveAndExposeSchemas();
}
});
addSchema(schema.name);
});
});
});
}
函数addSchema(schema){
modelConfig[schema]={
数据源:dataSourceName,
公众:对,,
$PROMITE:{},
$resolved:正确
};
}
函数saveAndExposeSchemas(){
writeFile('server/model config.json',prettyJSON(modelConfig),function(err){
如果(错误)抛出错误;
log('schema已公开!');
});
}
函数prettyJSON(str){
返回JSON.stringify(str,null,”);
}

您能更清楚地回答这个问题吗?您是否已经在数据库中创建了一个模式,并希望代码生成API端点?或者您是在代码中创建模型,并希望同时创建JSON模型和数据库模式?
{
  "name": "Order",
  "base": "PersistedModel",
  "properties": {
    "description": {
      "type": "string"
    },
    "total": {
      "type": "number"
    }
  },
  "validations": [],
  "relations": {
    "customer": {
      "type": "belongsTo",
      "model": "Customer",
      "foreignKey": ""
    }
  },
  "acls": [],
  "methods": []
}