Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 环回发现和构建模型不生成模型_Node.js_Loopbackjs_Strongloop - Fatal编程技术网

Node.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

我正在尝试获取环回以发现并构建我的第一个表。我使用了他们页面底部的简单示例:

我看到了我正在发现的表的输出,但是API浏览器没有显示该表或任何新生成的端点。此外,model-config.js文件不会使用新的表对象进行更新。以下是在服务器启动时完成的代码的基本部分:

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中。

因此,您可以尝试以下方法:

  • 在yourloopbackproject/server/datasources.json文件中设置mysql数据:
  • {
    “db”:{
    “名称”:“db”,
    “连接器”:“内存”
    },
    “帐户DS”:{
    “主机”:“mysqlServerName”,
    “港口”:3306,
    “数据库”:“数据库名称”,
    “用户名”:“用户名”,
    “密码”:“密码!”,
    “名称”:“accountDs”,
    “连接器”:“mysql”
    }
    }
    
  • 如果不存在,请创建models文件夹:yourloopbackproject/common/models

  • yourloopbackproject/server/bin文件夹上创建discovery and build.js脚本:

  • 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);
    
    此脚本基于:

  • 脚本执行后,您将在models文件夹中找到一个.json文件。转到基本程序的步骤3部分:

  • 按照以下步骤在REST上公开模型:

  • 我希望这有帮助

    为此使用圆弧。 从项目文件夹运行SLCARC,它将在默认浏览器中显示名为arc的gui工具。如果尚未注册,请注册并登录。您将被引导到StrongLoop的GUI工具Arc。从左窗格的列表中选择您的模型。您将能够看到“保存和迁移”按钮。只需单击“迁移”按钮,您的表将被创建到模型中。(毫秒内!)


    干杯

    发现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虽然这比编写脚本容易,但它没有任何选项来包含表之间的关系。