2016-12-13 105 views
1

繼承人我創建的模型片段。我希望id屬性總是通過uuid默認函數自動生成。但是,即使添加到隱藏的id屬性可以由用戶決定,如果他們將其傳遞到後創建方法。Strongloop UUID

除了使用方法掛鉤或操作掛鉤,總是覆蓋值有另一個環回方法或標誌(我也試過foreId屬性),以確保id始終是一個uuid,即使用戶提供一個值?如果沒有,那麼對於我的情況,「defaultFn」:「uuid」完全沒有意義,如果我總是覆蓋它。

{ 
    "name": "Account", 
    "base": "PersistedModel", 
    "strict": true, 
    "idInjection": false, 
    "options": { 
    "validateUpsert": true 
    }, 
    "properties": { 
    "id": { 
     "id": true, 
     "required": true, 
     "type": "string", 
     "defaultFn": "uuid" 
    }, 
    }, 
    "validations": [], 
    "relations": {}, 
    "acls": [], 
    "methods": {} 
} 
+0

唐不知道你爲什麼會被低估,因爲這是一個完全有效的問題(我發現了一些非常有用的問題) – Overdrivr

+0

@Overdrivr我或者因爲我無法在任何地方看到答案:p –

回答

2

出於某種原因,該ID可以由用戶通過REST API重新定義和使用idInjection: false和定義自定義ID屬性時不受保護。

我會在GitHub上開出罰單,如果它沒有這樣做,在此期間很容易使用before saveoperation hook

在Account.js,您可以修復它使用uuid

const uuidV4 = require('uuid/v4'); 
module.exports = function(Account) { 
    Account.observe('before save', function(ctx, cb){ 
    if (ctx.instance) { 
     ctx.instance.id = uuidV4(); 
    } else { 
     ctx.data.id = uuidV4(); 
    } 
    cb(); 
    }); 
}; 
+1

選擇此作爲答案,因爲這是我採取了同樣的方法。這似乎很愚蠢,你可以指定一個defaultFn,但用戶可以隨時覆蓋這個值。 –

+0

好吧,有'forceId'屬性,但它似乎並沒有工作。門票打開[這裏](https://github.com/strongloop/loopback/issues/3029#issuecomment-267143569)。 – Overdrivr