无法设置我的loopback模型。错误:持久模型未正确附加到DataSource

时间:2016-12-24 11:28:03

标签: loopback

restraunt.json file

`{
  "name": "restraunt",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "name": {
      "type": "string",
      "required": true
    },
    "location": {
      "type": "string",
      "required": true
    }
  },
  "validations": [],
  "relations": {},
  "acls": [],
  "methods": {}
}`

restraunt.js file

`module.exports = function(Restraunt) {
    Restraunt.find({where:{id:1}}, function(data) {
        console.log(data);
    })
};`

model-config.json  file
`"restraunt": {
    "dataSource": "restrauntManagement"
  }`

datasources.json file
`{
  "db": {
    "name": "db",
    "connector": "memory"
  },
  "restrauntManagement": {
    "host": "localhost",
    "port": 0,
    "url": "",
    "database": "restraunt-management",
    "password": "restraunt-management",
    "name": "restrauntManagement",
    "user": "rohit",
    "connector": "mysql"
  }
}`

我能够从资源管理器中获取,放置,发布,这意味着sql db已正确设置但我无法从restraunt.js文件中“查找”。它会抛出错误。 “错误:无法调用restraunt.find()。尚未设置find方法.PersistedModel尚未正确附加到DataSource”

2 个答案:

答案 0 :(得分:0)

再次尝试安装mysql连接器:

npm i -S loopback-connector-mysql

看看你的datasources.json,因为mysql的端口可能是错误的,默认端口是3306,你也可以尝试将localhost改为0.0.0.0。

"restrauntManagement": {
    "host": "localhost", /* if you're using docker, you need to set it to 0.0.0.0 instead of localhost */
    "port": 0, /* default port is 3306 */
    "url": "",
    "database": "restraunt-management",
    "password": "restraunt-management",
    "name": "restrauntManagement", 
    "user": "rohit",
    "connector": "mysql"
  }

model-config.json必须是:

"restraunt": {
    "dataSource": "restrauntManagement" /* this name must be the same name in datasources object key (in your case it is restrauntManagement not the connector name which is mysql) */
  }

您还需要执行餐馆模型的迁移:

在/ server / boot创建migration.js并添加:

'use strict';

module.exports = function(server) {
  var mysql = server.dataSources.mysql; 

  mysql.autoupdate('restraunt');
};

您需要迁移您将使用它的每个模型。如果您要将它们附加到数据源,还需要迁移默认模型(ACL,AccessToken等)。

同样在文档中说你不能在model.js文件中执行任何操作,因为系统(此时)它没有完全加载。您需要执行的任何操作必须位于/ boot目录中的.js文件中,因为系统已在那里完全加载。您可以在远程方法中执行操作,因为系统也已加载。

答案 1 :(得分:0)

除了在启动文件夹中执行代码外,还有可能使用附加模型后发出的事件。 您可以直接在model.js中而不是在引导文件夹中编写代码。

看起来像:

Model.once("attached", function () {})

Model = Accounts (for example).

我知道,这是一个老话题,但这也许可以帮助其他人。