3

我是 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'},..我无法以管理员身份登录。

4

1 回答 1

4

如果您的Role实体被存储在数据库中,那么此代码将在"admin"您的应用程序每次启动时尝试创建该角色实体(名称为 )。但是,在第一次之后,该角色已经存在,因此您会收到一个错误,即您有一个重复的“名称”。您可能想要做的是检查角色是否不存在,或者不将角色存储在您的数据库中。

您可以添加一些代码来检查当前数据库,并且仅在该角色不存在时才添加该角色。像这样的东西:

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...
    }
});

请注意,您还需要检查该角色表是否已经具有您要添加的主体,并且仅在它们不存在时才添加它们。

于 2016-09-15T18:26:13.063 回答