2016-09-14 32 views
3

我是太新的迴環,但我遵循安裝和腳手架我的文件夾(loopback服務器),在服務器/ boot /內的步驟創建一個文件的script.js,包括如下代碼:Loopback ValidationError:`Role`實例無效。詳細信息:`name`已存在(值:「管理員」)

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]', 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

,但我評論這個文件出來,並沒有得到那個錯誤。 順便說一句,我試圖改變{用戶名:'admin',..}和Role.create({0}名稱:'admin'},... 的鍵和值,但無論是不工作或它的工作原理但我不能以管理員身份登錄..它是對我來說太混亂。 有人能幫助嗎?

謝謝。

回答

2

如果你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請求它給了我這個錯誤:「錯誤」:{ 「名稱」 : 「錯誤」, 「狀態」:401, 「消息」: 「需要授權」, 「的StatusCode」:401, 「代碼」: 「AUTHORIZATION_REQUIRED」, –

+0

並請ü可以exlplain這更多的(如果你」如果角色實體存儲在數據庫中,那麼這段代碼將嘗試在每次啓動應用程序時創建該角色實體(名稱爲「admin」)。順便說一句,在啓動thr服務器之前,我有一個空的數據庫 –

+0

授權錯誤完全取決於你想要做什麼以及你在模型上使用了哪些ACL。至於我的文本的解釋,我不知道該怎麼說...如果你的角色被存儲在數據庫中,那麼每次應用程序啓動時都不能重新創建它們(這是什麼一個啓動腳本)。 – jakerella