将内置模型迁移到数据库

时间:2015-04-30 18:18:27

标签: loopbackjs strongloop

如何将内置模型(如用户,角色,用户角色映射等)移动到我们创建的数据库而不是默认数据源:db?内置模型未在Arc中列出。

我尝试创建一个继承这些基本模型的新模型。但是,数据不会保存到新模型中。

请建议......我已经坐了好几个星期了。感谢

1 个答案:

答案 0 :(得分:12)

默认“db”数据源放在内存中。这就是重启应用程序后不会保留数据的原因。您必须安装适当的数据库连接器,然后必须在server / datasources.js中为数据库添加数据源。

http://docs.strongloop.com/display/public/LB/Connecting+models+to+data+sources

如果使用“slc loopback”命令创建应用程序,则数据源仅包含内存连接器。检查datasources.js文件,您将看到如下内容:

{
  "db": {
  "name": "db",
  "connector": "memory"
  }
}

如果要在postgresql数据库中保存数据(对于任何支持的连接器,进程几乎相同),则必须使用数据库信息扩展datasoruces.json文件:

{
  "db": {
  "name": "db",
  "connector": "memory"
  },

  "mydata": {
    "host": "db_host",
    "database": "your_database_name",
    "username": "your_db_username",
    "password": "your_db_password",
    "connector": "postgresql"
  }
}

您也可以使用“slc loopback:datasource”命令执行此操作。向导将帮助您定义数据源。不要忘记安装db连接器。

npm install loopback-connector-postgresql

最后要做的是将数据源分配给所需的模型。您可以使用向导执行此操作(请参阅slc loopback:model命令),也可以手动编辑server / model-config.json文件。

{
  "User": {
    "dataSource": "mydata",
    "public": true
  },
  "AccessToken": {
    "dataSource": "mydata",
    "public": false
  },
  "ACL": {
    "dataSource": "mydata",
    "public": false
  },
  "RoleMapping": {
    "dataSource": "mydata",
    "public": false
  },
  "Role": {
    "dataSource": "mydata",
    "public": false
  }
}

<强>更新 您可以尝试使用此代码段来更新模型中的表格。将他的代码放在server / server.js

var appModels = ['User', 'AccessToken', 'ACL', 'RoleMapping', 'Role'];

var ds = app.dataSources.mydata;
ds.isActual(appModels, function(err, actual) {
  if (!actual) {
    ds.autoupdate(appModels, function(err) {
      if (err) throw (err);
    });
  }
});

我建议您阅读有关在strongloop页面上的模型创建/更新数据库架构的信息。注意自动更新和自动挂载功能之间的区别

http://docs.strongloop.com/display/public/LB/Creating+a+database+schema+from+models

相关问题