Strongloop UUID

问题描述:

继承人我创建的模型片段。我希望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 –

出于某种原因,该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