StrongLoop ACL table 不存在

StrongLoop ACL table doesn't exist

我成功地从我的数据库生成了我所有的模型。然后,我 运行 api 通过执行 'node .' 我能够看到我所有的 Web 服务,但是当我尝试尝试服务时,出现 500 错误,告诉我没有 ACL table。 所以,我打开 model-config.json,我看到有 4 个我之前没有创建的模型(User、AccessToken、ACL、RoleMapping 和 Role)。 我想知道我的数据库中是否必须存在所有这些模型。你知道我必须在每个 table 中放入哪些属性吗? 提前谢谢你。

Error:
{
  "error": {
    "name": "Error",
    "status": 500,
    "message": "ER_NO_SUCH_TABLE: Table 'sed.ACL' doesn't exist",
    "code": "ER_NO_SUCH_TABLE",
    "errno": 1146,
    "sqlState": "42S02",
    "index": 0,
    "stack": "Error: ER_NO_SUCH_TABLE: Table 'sed.ACL' doesn't exist\n [...]"
  }
}

您需要自己自动迁移这些表。参见:

您需要自己迁移它们

  1. 按照Attaching models to data sources中的基本步骤从内存数据源更改为您要使用的数据库。
  2. 使用以下内容创建 server/create-lb-tables.js 文件:

var server = require('./server'); var ds = server.dataSources.db; var lbTables = ['User', 'AccessToken', 'ACL', 'RoleMapping', 'Role']; ds.automigrate(lbTables, function(er) { if (er) throw er; console.log('Loopback tables [' - lbTables - '] created in ', ds.adapter.name); ds.disconnect(); });

  1. 运行 手动脚本:

$ cd server

$ node create-lb-tables.js

For further details see loopback Documentation

var server = require('./server');
    var ds = server.dataSources.db;
    var lbTables = ['User', 'AccessToken', 'ACL', 'RoleMapping', 'Role'];
    ds.automigrate(lbTables, function(er) {
        if (er) throw er;
        console.log('Loopback tables [' - lbTables - '] created in ', ds.adapter.name);
        ds.disconnect();
    });

这里 var ds = server.dataSources.db;

db 将是您在 datasource.json 中使用的数据库名称。

数据库连接字符串:

{
  "db": {
    "name": "db",
    "connector": "memory"
  },
  "inventory": {
    "host": "localhost",
    "port": 3306,
    "url": "",
    "database": "inventory",
    "password": "root",
    "name": "inventory",
    "user": "root",
    "connector": "mysql"
  }
}

这是我的数据库名称:

"database": "inventory"

更新后的代码是

var server = require('./server');
    var ds = server.dataSources.inventory;
    var lbTables = ['User', 'AccessToken', 'ACL', 'RoleMapping', 'Role'];
    ds.automigrate(lbTables, function(er) {
        if (er) throw er;
        console.log('Loopback tables [' - lbTables - '] created in ', ds.adapter.name);
        ds.disconnect();
    });

使用 node filename.js 目录中的独立保存文件拍摄此代码 并且有效。