Strongloop UUID

Strongloop UUID

这是我创建的模型的片段。我希望 id 属性 始终通过 uuid 默认函数自动生成。但是,即使添加到隐藏的 id 属性 也可以由用户决定是否将其传递给 post 创建方法。

除了使用方法钩子或操作钩子之外,要始终覆盖该值是否有另一种环回方法或标志(我也尝试过 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": {}
}

出于某种原因,用户可以通过 REST api 重新定义 ID,并且在使用 idInjection: false 和定义自定义 ID 属性 时不受保护。

如果还没有完成,我会在 github 开一张工单,与此同时,您可以使用 before save operation 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();
  });
};