具有 mysql 数据库的环回默认模型
Loopback default models with a mysql database
我正在尝试环回并注意到在 model-config
文件中它引用了 5 个模型,这些模型的 dataSource
设置为内存数据库 db
:
"User": {
"dataSource": "db"
},
"AccessToken": {
"dataSource": "db",
"public": false
},
"ACL": {
"dataSource": "db",
"public": false
},
"RoleMapping": {
"dataSource": "db",
"public": false
},
"Role": {
"dataSource": "db",
"public": false
}
这是将用户、acl 等保存在内存中的理想行为吗?如果没有,我如何将这些模型移植到 mysql
?我尝试将 dataSource
切换到我的 mysql
源,但服务器抱怨因为表不存在。
您需要进行迁移。查看 auto-migrate but the easiest solution (no coding) is to use strongloop arc.
的文档
要对其进行编码,您可以将自动迁移放入启动脚本中,例如 dataSource.automigrate();
,它会构建表,但也会删除您拥有的任何现有数据。
复制粘贴以下代码到server/server.js。 (最好到最后)
var appModels = ['User', 'AccessToken', 'ACL', 'RoleMapping', 'Role'];
var ds = app.dataSources.mysqlDS;
ds.isActual(appModels, function(err, actual) {
if (!actual) {
ds.autoupdate(appModels, function(err) {
if (err) throw (err);
});
}
});
不要忘记将模型的数据源更改为模型-config.json 中的新数据源。在代码中将 mysqlDS 替换为您的数据源。
干杯!
参考:
https://loopback.io/doc/en/lb3/Creating-database-tables-for-built-in-models.html
在 MySql 数据库中添加这些 table:-
CREATE TABLE `AccessToken` (
`id` VARCHAR(255) NOT NULL,
`ttl` INT(11) NULL DEFAULT NULL,
`scopes` TEXT NULL,
`created` DATETIME NULL DEFAULT NULL,
`userId` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;
CREATE TABLE `ACL` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`model` VARCHAR(512) NULL DEFAULT NULL,
`property` VARCHAR(512) NULL DEFAULT NULL,
`accessType` VARCHAR(512) NULL DEFAULT NULL,
`permission` VARCHAR(512) NULL DEFAULT NULL,
`principalType` VARCHAR(512) NULL DEFAULT NULL,
`principalId` VARCHAR(512) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;
CREATE TABLE `Role` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(512) NOT NULL,
`description` VARCHAR(512) NULL DEFAULT NULL,
`created` DATETIME NULL DEFAULT NULL,
`modified` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;
CREATE TABLE `RoleMapping` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`principalType` VARCHAR(512) NULL DEFAULT NULL,
`principalId` VARCHAR(255) NULL DEFAULT NULL,
`roleId` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `principalId` (`principalId`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;
CREATE TABLE `User` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`realm` VARCHAR(512) NULL DEFAULT NULL,
`username` VARCHAR(512) NULL DEFAULT NULL,
`password` VARCHAR(512) NOT NULL,
`email` VARCHAR(512) NOT NULL,
`emailVerified` TINYINT(1) NULL DEFAULT NULL,
`verificationToken` VARCHAR(512) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;
我正在尝试环回并注意到在 model-config
文件中它引用了 5 个模型,这些模型的 dataSource
设置为内存数据库 db
:
"User": {
"dataSource": "db"
},
"AccessToken": {
"dataSource": "db",
"public": false
},
"ACL": {
"dataSource": "db",
"public": false
},
"RoleMapping": {
"dataSource": "db",
"public": false
},
"Role": {
"dataSource": "db",
"public": false
}
这是将用户、acl 等保存在内存中的理想行为吗?如果没有,我如何将这些模型移植到 mysql
?我尝试将 dataSource
切换到我的 mysql
源,但服务器抱怨因为表不存在。
您需要进行迁移。查看 auto-migrate but the easiest solution (no coding) is to use strongloop arc.
的文档要对其进行编码,您可以将自动迁移放入启动脚本中,例如 dataSource.automigrate();
,它会构建表,但也会删除您拥有的任何现有数据。
复制粘贴以下代码到server/server.js。 (最好到最后)
var appModels = ['User', 'AccessToken', 'ACL', 'RoleMapping', 'Role'];
var ds = app.dataSources.mysqlDS;
ds.isActual(appModels, function(err, actual) {
if (!actual) {
ds.autoupdate(appModels, function(err) {
if (err) throw (err);
});
}
});
不要忘记将模型的数据源更改为模型-config.json 中的新数据源。在代码中将 mysqlDS 替换为您的数据源。
干杯!
参考: https://loopback.io/doc/en/lb3/Creating-database-tables-for-built-in-models.html
在 MySql 数据库中添加这些 table:-
CREATE TABLE `AccessToken` (
`id` VARCHAR(255) NOT NULL,
`ttl` INT(11) NULL DEFAULT NULL,
`scopes` TEXT NULL,
`created` DATETIME NULL DEFAULT NULL,
`userId` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;
CREATE TABLE `ACL` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`model` VARCHAR(512) NULL DEFAULT NULL,
`property` VARCHAR(512) NULL DEFAULT NULL,
`accessType` VARCHAR(512) NULL DEFAULT NULL,
`permission` VARCHAR(512) NULL DEFAULT NULL,
`principalType` VARCHAR(512) NULL DEFAULT NULL,
`principalId` VARCHAR(512) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;
CREATE TABLE `Role` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(512) NOT NULL,
`description` VARCHAR(512) NULL DEFAULT NULL,
`created` DATETIME NULL DEFAULT NULL,
`modified` DATETIME NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;
CREATE TABLE `RoleMapping` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`principalType` VARCHAR(512) NULL DEFAULT NULL,
`principalId` VARCHAR(255) NULL DEFAULT NULL,
`roleId` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `principalId` (`principalId`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;
CREATE TABLE `User` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`realm` VARCHAR(512) NULL DEFAULT NULL,
`username` VARCHAR(512) NULL DEFAULT NULL,
`password` VARCHAR(512) NOT NULL,
`email` VARCHAR(512) NOT NULL,
`emailVerified` TINYINT(1) NULL DEFAULT NULL,
`verificationToken` VARCHAR(512) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;