2016-09-14 8 views
3

Я слишком новичок в loopback, однако я выполнил шаги по установке и созданию моей папки (loopback-server), внутри сервера/boot/i создал один файл script.js и включал в себя следующий код:Проверка соответствия меток Loopback: экземпляр `Role` недействителен. Подробности: `name` уже существует (значение:« admin »)

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: '[email protected]admin.com', password: 'abcdef'}, 
    {username: 'user', email: '[email protected]', 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); 
     }); 
    }); 
    }); 
}); 

}; 

теперь им получать эту ошибку: terminal error

, если вам требуется больше файлов, дайте мне знать в комментариях ниже, пожалуйста, но я комментировал этот файл, и не получил эта ошибка. Кстати, я попытался изменить ключи и значения {username: 'admin', ..} и Role.create ({ имя: 'admin'}, .... , но либо не работает, либо работает но я не могу войти в систему как администратор .. это слишком запутанной для меня. кто-нибудь может помочь, пожалуйста?

спасибо.

ответ

2

Если вы Role объект будет храниться в базе данных, то этот код будет пытаться создайте этот объект Role (с именем "admin") каждый раз, когда ваше приложение запустится. Однако после того, как первый раз эта роль будет существовать, вы получите сообщение об ошибке, в котором у вас есть дублирующее «имя». проверяет, что Роль не существует ady существуют или не сохраняют роли в вашей БД.

Вы можете добавить код для проверки текущей БД и только добавить эту роль, если она не существует. Что-то вроде этого:

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

Обратите внимание, что вы также хотите, чтобы проверить, что таблица Роль уже имеет принципалов вы добавляющие и только добавить их, если они уже не существуют.

+0

Спасибо, что вы говорите, имеет смысл, и теперь я не могу видеть ошибку, но .. когда я вхожу в систему как администратор и использую токен для запроса GET, он дает мне эту ошибку: «error»: { "name" : "Ошибка", "статус": 401, "сообщение": "Требуется авторизация", "StatusCode": 401, "код": "AUTHORIZATION_REQUIRED", –

+0

и, пожалуйста, может у exlplain это больше (если вы re entity-объект сохраняется в базе данных, тогда этот код попытается создать этот объект Role (с именем «admin») каждый раз, когда ваше приложение запустится.) Кстати, у меня был пустой db, прежде чем запускать сервер –

+0

Авторизация ошибка полностью зависит от того, что вы пытались сделать, и от того, какие ACL у вас есть на ваших моделях. Что касается объяснения моего текста, я не уверен, как еще сказать, что ... если ваша 'Role' хранится в базе данных, то вы не можете их воссоздавать каждый раз, когда приложение запускается (что и есть сценарий загрузки). – jakerella

 Смежные вопросы

  • Нет связанных вопросов^_^