Loopback ValidationError: The `Role` instance is not valid. Details: `name` already exists (value: "admin")
Loopback ValidationError: The `Role` instance is not valid. Details: `name` already exists (value: "admin")
我是 loopback 的新手,但是我按照步骤在 server/boot/ 中安装和构建了我的文件夹 (loopback-server) 我创建了一个文件 script.js 并包含了以下代码:
module.exports = function(app) {
var MongoDB = app.dataSources.MongoDB;
MongoDB.automigrate('Customer', function(err) {
if (err) throw (err);
var Customer = app.models.Customer;
Customer.create([
{username: 'admin', email: 'admin@admin.com', password: 'abcdef'},
{username: 'user', email: 'muppala@ust.hk', password: 'abcdef'}
], function(err, users) {
if (err) throw (err);
var Role = app.models.Role;
var RoleMapping = app.models.RoleMapping;
//create the admin role
Role.create({
name: 'admin'
}, function(err, role) {
if (err) throw (err);
//make admin
role.principals.create({
principalType: RoleMapping.USER,
principalId: users[0].id
}, function(err, principal) {
if (err) throw (err);
});
});
});
});
};
现在我收到这个错误:
我注释掉了这个文件,但没有收到那个错误。顺便说一句,我试图更改 {username: 'admin',..} 和 Role.create({name: 'admin'},.... 的键和值,但两者都没有不工作或者它工作但是我不能以管理员身份登录。
如果您 Role
实体存储在数据库中,则此代码将在您的应用程序每次启动时尝试创建该角色实体(名称为 "admin"
)。但是,在第一次之后,该角色已经存在,因此您会收到一个错误消息,提示您有一个重复的 "name"。您可能想要做的是检查角色是否不存在,或者不将角色存储在您的数据库中。
您可以添加一些代码来检查当前数据库,并且仅在该角色不存在时才添加该角色。像这样:
Role.find({ name: 'admin' }, function(err, results) {
if (err) { /* handle this! */ }
if (results.length < 1) {
// now we know the DB doesn't have it already, so do the Role creation...
}
});
请注意,您还需要检查该角色 table 是否已经拥有您要添加的主体,并且只有在它们不存在时才添加它们。
我是 loopback 的新手,但是我按照步骤在 server/boot/ 中安装和构建了我的文件夹 (loopback-server) 我创建了一个文件 script.js 并包含了以下代码:
module.exports = function(app) {
var MongoDB = app.dataSources.MongoDB;
MongoDB.automigrate('Customer', function(err) {
if (err) throw (err);
var Customer = app.models.Customer;
Customer.create([
{username: 'admin', email: 'admin@admin.com', password: 'abcdef'},
{username: 'user', email: 'muppala@ust.hk', password: 'abcdef'}
], function(err, users) {
if (err) throw (err);
var Role = app.models.Role;
var RoleMapping = app.models.RoleMapping;
//create the admin role
Role.create({
name: 'admin'
}, function(err, role) {
if (err) throw (err);
//make admin
role.principals.create({
principalType: RoleMapping.USER,
principalId: users[0].id
}, function(err, principal) {
if (err) throw (err);
});
});
});
});
};
现在我收到这个错误:
我注释掉了这个文件,但没有收到那个错误。顺便说一句,我试图更改 {username: 'admin',..} 和 Role.create({name: 'admin'},.... 的键和值,但两者都没有不工作或者它工作但是我不能以管理员身份登录。
如果您 Role
实体存储在数据库中,则此代码将在您的应用程序每次启动时尝试创建该角色实体(名称为 "admin"
)。但是,在第一次之后,该角色已经存在,因此您会收到一个错误消息,提示您有一个重复的 "name"。您可能想要做的是检查角色是否不存在,或者不将角色存储在您的数据库中。
您可以添加一些代码来检查当前数据库,并且仅在该角色不存在时才添加该角色。像这样:
Role.find({ name: 'admin' }, function(err, results) {
if (err) { /* handle this! */ }
if (results.length < 1) {
// now we know the DB doesn't have it already, so do the Role creation...
}
});
请注意,您还需要检查该角色 table 是否已经拥有您要添加的主体,并且只有在它们不存在时才添加它们。