Loopback + MongoDB,AutoMigrate给出错误

时间:2015-10-15 08:20:19

标签: mongodb loopbackjs

我正在尝试关注Getting started with LoopBack但是我没有连接到MySql实例,而是尝试连接到localhost上运行的MongoDB实例(默认端口27017)。

按照Connect your API to a data source中给出的node .执行的步骤执行此操作时,这会导致我出现以下错误,然后节点正在停止。

  

d:\ TestLoopBack \ node_modules \环回连接器-mongodb的\ node_modules \ mongodb的\ lib中\ utils.js:98

process.nextTick(function() { throw err; });
                              ^ ValidationError: The `CoffeeShop` instance is not valid.
     

详细信息:Name不能为空(值:   undefined)。,ValidationError:CoffeeShop实例无效。   详细信息:Name不能为空(值:未定义)。,ValidationError:   CoffeeShop实例无效。详细信息:Name不能为空   (值:未定义)。

有人可以帮我理解这个错误是什么,我该如何解决?

我的datasources.json文件有:

  

{ "db": { "name": "db", "connector": "memory" }, "mongoDs": { "name": "mongoDs", "connector": "mongodb", "host": "localhost", "port": 27017, "database": "TestLoopBackDB" } }

我没有在MongoDB上设置任何身份验证,因此没有指定用户名/密码。

2 个答案:

答案 0 :(得分:0)

如果您正在使用现成的mongoDB集合,那么请使用MongoDB中的任何集合,然后首先发现模型然后在您的环回应用程序中使用。 发现任何模型使用server / bin / discover.js中的以下脚本

var path = require('path');
var fs = require('fs');
var app = require(path.resolve(__dirname, '../server'));
var outputPath = path.resolve(__dirname, '../../common/models');

var dataSource = app.dataSources.mongoDs;

function schemaCB(err, schema) {
  if(schema) {
    console.log("Auto discovery success: " + schema.name);
    var outputName = outputPath + '/' +schema.name + '.json';
    fs.writeFile(outputName, JSON.stringify(schema, null, 2), function(err) {
      if(err) {
        console.log(err);
      } else {
        console.log("JSON saved to " + outputName);
      }
    });
  }
  if(err) {
    console.error(err);
    return;
  }
  return;
};

dataSource.discoverSchema('CoffeeShop',{schema:'TestLoopBackDB'},schemaCB);

运行上面的脚本来发现和构建模型[node server / bin / disovery.js] 在server / model-config.json之后,在最后一个对象之后添加它。

"CoffeeShop": {
    "dataSource": "mongoDS",
    "public": true
  }

现在运行你的环回应用程序。

答案 1 :(得分:0)

这是一个愚蠢的错误。 :(

在定义模型时,我输入了Name作为属性。我只是从Connect your API to a data source复制粘贴的automigrate代码,其中包含属性name的小写字母。在两个地方制作相同的案例后,它没有任何问题:)