Loopback 使用 discoverSchemas 从数据源获取模型
Loopback get model from datasource with discoverSchemas
我已经测试环回几个小时了,当我手动创建模型并修改创建的 model.json 以匹配我的 oracleDb 列名称时,一切正常。
但是当我想从我的 oracle 数据库中获取模型以避免手动编写 50 列时,我遇到了困难。
我用名为 "atest" 的 table 进行了测试,其中包含一列 "name" 和 "id"。
它创建了 atest.json ,并将其添加到 model-config.json:
"Atest": {
"dataSource": "oracledb",
"public":真
}
但是在我的 atest.json 中只有一个 "undefined"..
我的发现-models.js 文件:
'use strict';
const loopback = require('loopback');
const promisify = require('util').promisify;
const fs = require('fs');
const writeFile = promisify(fs.writeFile);
const readFile = promisify(fs.readFile);
const mkdirp = promisify(require('mkdirp'));
const DATASOURCE_NAME = 'oracledb';
const dataSourceConfig = require('./server/datasources.json');
const db = new loopback.DataSource(dataSourceConfig[DATASOURCE_NAME]);
discover().then(
success => process.exit(),
error => { console.error('UNHANDLED ERROR:\n', error); process.exit(1); },
);
async function discover() {
// It's important to pass the same "options" object to all calls
// of dataSource.discoverSchemas(), it allows the method to cache
// discovered related models
const options = { relations: false };
// Discover models and relations
const atestSchemas = await db.discoverSchemas('ATEST', options);
// Create model definition files
await mkdirp('common/models');
var response = await writeFile(
'common/models/atest.json',
JSON.stringify(atestSchemas['ATEST'], null, 2)
);
console.log(response);
// Expose models via REST API
const configJson = await readFile('server/model-config.json', 'utf-8');
console.log('MODEL CONFIG', configJson);
const config = JSON.parse(configJson);
config.Atest = { dataSource: DATASOURCE_NAME, public: true };
await writeFile(
'server/model-config.json',
JSON.stringify(config, null, 2)
);
}
我的 oracle 连接工作正常,我不明白,知道吗?
调用 discoverSchemas
后添加 console.log
:
// Discover models and relations
const atestSchemas = await db.discoverSchemas('ATEST', options);
console.log(atestSchemas);
您应该看到密钥不只是 'ATEST',正如稍后在 atestSchemas['ATEST'] 中引用的那样。关键是 'SCHEMA_NAME.ATEST'(SCHEMA_NAME 会根据您的环境而有所不同)。
如果您定位到适当的键,您应该会得到您要找的东西。
我已经测试环回几个小时了,当我手动创建模型并修改创建的 model.json 以匹配我的 oracleDb 列名称时,一切正常。
但是当我想从我的 oracle 数据库中获取模型以避免手动编写 50 列时,我遇到了困难。 我用名为 "atest" 的 table 进行了测试,其中包含一列 "name" 和 "id"。 它创建了 atest.json ,并将其添加到 model-config.json:
"Atest": { "dataSource": "oracledb", "public":真 }
但是在我的 atest.json 中只有一个 "undefined"..
我的发现-models.js 文件:
'use strict';
const loopback = require('loopback');
const promisify = require('util').promisify;
const fs = require('fs');
const writeFile = promisify(fs.writeFile);
const readFile = promisify(fs.readFile);
const mkdirp = promisify(require('mkdirp'));
const DATASOURCE_NAME = 'oracledb';
const dataSourceConfig = require('./server/datasources.json');
const db = new loopback.DataSource(dataSourceConfig[DATASOURCE_NAME]);
discover().then(
success => process.exit(),
error => { console.error('UNHANDLED ERROR:\n', error); process.exit(1); },
);
async function discover() {
// It's important to pass the same "options" object to all calls
// of dataSource.discoverSchemas(), it allows the method to cache
// discovered related models
const options = { relations: false };
// Discover models and relations
const atestSchemas = await db.discoverSchemas('ATEST', options);
// Create model definition files
await mkdirp('common/models');
var response = await writeFile(
'common/models/atest.json',
JSON.stringify(atestSchemas['ATEST'], null, 2)
);
console.log(response);
// Expose models via REST API
const configJson = await readFile('server/model-config.json', 'utf-8');
console.log('MODEL CONFIG', configJson);
const config = JSON.parse(configJson);
config.Atest = { dataSource: DATASOURCE_NAME, public: true };
await writeFile(
'server/model-config.json',
JSON.stringify(config, null, 2)
);
}
我的 oracle 连接工作正常,我不明白,知道吗?
调用 discoverSchemas
后添加 console.log
:
// Discover models and relations
const atestSchemas = await db.discoverSchemas('ATEST', options);
console.log(atestSchemas);
您应该看到密钥不只是 'ATEST',正如稍后在 atestSchemas['ATEST'] 中引用的那样。关键是 'SCHEMA_NAME.ATEST'(SCHEMA_NAME 会根据您的环境而有所不同)。
如果您定位到适当的键,您应该会得到您要找的东西。