如何从非结构化数据创建loopback <model> .json文件

时间:2015-11-20 14:46:52

标签: loopbackjs

我可以从示例json实例创建一个loopback模型,如下所示https://docs.strongloop.com/display/public/LB/Creating+models+from+unstructured+data。但是,有一个API可以在common / models中创建.json文件吗?

3 个答案:

答案 0 :(得分:0)

来自Looback Gitter的@BoLaMN说:

  

尝试app.registry.modelBuilder.introspect(json);应该给你一个属性对象。然后只需添加名称,基础名称和fs.writeSync JSON.stringify(obj)

我还没有尝试过,但这是有道理的。

答案 1 :(得分:0)

我一直在使用它:

  var User = db.buildModelFromInstance('User', user, {idInjection: true});

  var UserModel = (loopback.getModel(User));
  var UserModelJSON = {}  
  UserModelJSON.name = 'User';
  UserModelJSON.base = 'PersistedModel';
  UserModelJSON.properties = UserModel.definition.rawProperties;

  console.log(JSON.stringify(UserModelJSON));

  fs.writeFile('User.json', 'UserModelJSON', function(err) {
    if (err) throw err;
  });

答案 2 :(得分:0)

在项目根目录的loopback /server目录中,如果您定义datasources.json文件,那么

{
  "db": {
    ...
  },
  "restResourceName": {
    "name": "restResourceName",
    "baseURL": "http://restResourceUrl/",
    "crud": true,
    "connector": "rest"
  }
}

你定义了一个启动脚本,就像这样

const fs = require('fs')
const path = require('path')

const writeInstance = (server, modelName, instance) => {
  let Model = server.dataSources.restResourceName.buildModelFromInstance(modelName, instance)
  let modelJson = Model.definition.toJSON()
  delete modelJson.settings.base
  fs.writeFile(path.join(__dirname, '..', 'models', modelName + '.json'),
    JSON.stringify(modelJson, null, 2), (/*...*/) => {
      /*...*/
    })
}

module.exports = function (server) {
  writeInstance(server, "Atom", {
    atomicWeight: 6
  })
}

您将生成模型文件Atom.json

{
  "name": "Atom",
  "properties": {
    "atomicWeight": {
      "type": "Number"
    },
    "id": {
      "type": "Number",
      "id": 1,
      "generated": true,
      "updateOnly": true
    }
  },
  "settings": {
    "strict": false,
    "forceId": "auto",
    "replaceOnPUT": true
  }
}

如果您想在loopback api explorer(swagger GUI)中查看模型,您必须将模型添加到model-config.json public: true属性

{
  "_meta": {
    "sources": [
      ...
    ],
    "mixins": [
      ...
    ]
  },
  "Atom": {
    "public": true,
    "dataSource": "restResourceName"
  }
}