Node.js 环回发现和构建模型不生成模型
我正在尝试获取环回以发现并构建我的第一个表。我使用了他们页面底部的简单示例: 我看到了我正在发现的表的输出,但是API浏览器没有显示该表或任何新生成的端点。此外,model-config.js文件不会使用新的表对象进行更新。以下是在服务器启动时完成的代码的基本部分:Node.js 环回发现和构建模型不生成模型,node.js,loopbackjs,strongloop,Node.js,Loopbackjs,Strongloop,我正在尝试获取环回以发现并构建我的第一个表。我使用了他们页面底部的简单示例: 我看到了我正在发现的表的输出,但是API浏览器没有显示该表或任何新生成的端点。此外,model-config.js文件不会使用新的表对象进行更新。以下是在服务器启动时完成的代码的基本部分: var loopback = require('loopback'); var boot = require('loopback-boot'); var DataSource = require('loopback-datasou
var loopback = require('loopback');
var boot = require('loopback-boot');
var DataSource = require('loopback-datasource-juggler').DataSource;
var mysqlSource = require('./datasources.json');
var dataSource = new DataSource('mssql', mysqlSource.mysqlserver);
var app = module.exports = loopback();
// Set up the /favicon.ico
app.use(loopback.favicon());
// request pre-processing middleware
app.use(loopback.compress());
// -- Add your pre-processing middleware here --
dataSource.discoverAndBuildModels('CATS', {owner: 'mamacat'}, function (err, models) {
models.Cat.find(function (err, cat) {
if (err) {
console.error(err);
} else {
console.log(cat);
}
dataSource.disconnect();
});
});
// boot scripts mount components like REST API
boot(app, __dirname);
总而言之,这将运行,没有错误。但在
http://localhost:3000/explorer
发现脚本似乎只显示输出,而不创建模型文件。我在环回文档中找到了一些说明:
在“基本程序”部分中,第二步:
2。使用fs.writeFile()将输出保存在common/models/model name.json中。
因此,您可以尝试以下方法:
{
“db”:{
“名称”:“db”,
“连接器”:“内存”
},
“帐户DS”:{
“主机”:“mysqlServerName”,
“港口”:3306,
“数据库”:“数据库名称”,
“用户名”:“用户名”,
“密码”:“密码!”,
“名称”:“accountDs”,
“连接器”:“mysql”
}
}
var path=require('path');
var fs=需要('fs');
var app=require(path.resolve(_dirname,../server');
var outputPath=path.resolve(_dirname,'../../common/models');
var dataSource=app.dataSources.accountDs;
函数schemaCB(err,schema){
if(模式){
log(“自动发现成功:+schema.name”);
var outputName=outputPath+'/'+schema.name+'.json';
writeFile(outputName,JSON.stringify(schema,null,2),函数(err){
如果(错误){
控制台日志(err);
}否则{
log(“JSON保存到”+outputName);
}
});
}
如果(错误){
控制台错误(err);
返回;
}
返回;
};
discoverSchema('tableName',{schema:'schemaName'},schemaCB);
此脚本基于:
干杯 发现api仅用于发现模式,暂时不用于创建模型。 请使用以下项目创建具有一对一和一对多关系的模型以及所有模型 在建筑之外,我做了如下的事情
var fs=require('fs');
var app=require(uu dirname+'/server/server');
函数makePromise(f,父函数){
返回函数(…args){
返回新承诺((解决、拒绝)=>{
f、 调用(父,…参数,(错误,…数据)=>{
如果(错误)返回拒绝(错误);
解析(data.length==1?数据[0]:数据);
});
});
};
}
var readFile=makePromise(fs.readFile,fs);
var writeFile=makePromise(fs.writeFile,fs);
函数writeSchemas(模式){
返回Promise.all(schemas.map)(数据=>{
var schema=data[Object.keys(data)[0]];
返回writeFile('common/models/'+schema.name+'.json',json.stringify(schema,null,'\t'));
}))
.then(()=>readFile('server/model config.json'))
.then(JSON.parse)
。然后(conf=>{
for(让模式中的模式)
conf[schema[Object.keys(schema)[0]].name]={“dataSource”:“mysql”};
返回形态;
})
.then(conf=>writeFile('server/model config.json',json.stringify(conf,null,'\t'));
}
函数getSchemas(ds){
var discoverSchemas=承诺(ds.discoverSchemas,ds);
返回makePromise(ds.discoverModelDefinitions,ds)({})
.then(tables=>Promise.all(tables.map(t=>discoverSchemas(t.name,{relations:true})))
.then(数据=>{ds.disconnect();返回数据;});
}
Promise.resolve(app.datasources.mysql)
.then(ds=>getSchemas(ds))
.then(模式=>writeSchemas(模式))
.catch(err=>log.error(err));
谢谢,我刚刚用这个名称替换了我的实际数据源,以便于显示。它使用了正确的驱动程序类型,只是我的命名不好。我也观察到了同样的情况,但原因是我使用模型的基类作为“model”而不是“PersistedModel”。我也有同样的问题。我在server/boot/discover.js中进行了发现,得到了相同的结果。这行代码似乎不起作用var-app=require(path.resolve(_dirname,../server')代码>嗯,这很奇怪。执行时是否有任何错误消息?我正在测试代码,执行这行代码没有问题。脚本必须位于“yourloopbackproject/server/bin”上的bin文件夹中。顺便说一句@Anoop.P.A评论说,您可以使用arc发现模型。:)并传递associations:true
以包含表关系您指的是关系:true虽然这比编写脚本容易,但它没有任何选项来包含表之间的关系。