如何定义和使用 UUID 字段?
How can I define and use a UUID field?
我需要一个内容类型中的UUID字段,借助下面的介绍我已经修改了文件"MyType.settings.json"。
https://strapi.io/documentation/3.x.x/guides/models.html#define-the-attributes
"uid": {
"default": "",
"type": "uuid"
},
我以为自动保存了一个UUID,但是没有任何反应。
如何定义和使用 UUID 字段?有人可以给我提示吗?
我是否也应该修改文件 \api\MyType\controllers\MyType.js?
提前致谢!
本杰明
您将不得不使用 uuid
节点模块。
所以保留你的属性并在 lifeCyle 函数中,用 lib.
设置你的 uuid
'use strict';
const uuid = require('uuid');
module.exports = {
beforeCreate: async (model) => {
model.set('uid', uuid());
}
};
您可能还需要一个 v4 UUID,它的生成速度最快 非常 很大余量,并且在所有其他条件相同的情况下,您发生冲突的机会最少(可以是 10 倍甚至更快),这是 99% 的人想要生成 UUID 的原因:
Work in the global UUID community, remain as unique as possible, not collide with anything else.
此外,v4 比 v1 更安全,因为 v1 包括它的制作时间和它是在哪个硬件上创建的,并且具有 疯狂 更高的冲突率,因为今天没有人尊重节点字段并用熵填充它,这破坏了 v1 的全部目的。
使用 v4 而不是 v1 的原因如此明显,以至于应该 public 和广泛传播这些信息。这是白天和黑夜。所有只寻求熵的主要框架现在都使用 v4.
import { v4 as uuid } from "uuid";
// Then just...
const myUUID = uuid()
UUID v1 的创建是因为人们,即使是想出 UUID 的天才计算机科学家,也没有完全理解单独的 128 位地址 space 比花哨的计时和节点跟踪要好得多。 UUID v1 是过度工程的一个很好的例子。
为了在通过 API 和管理 UI 保存实体后自动生成 uuid,请使用模型的 lifecycle
方法,而不是控制器。因此,文件 /api/myType/models/myType.js
可能如下所示:
'use strict';
const { v4: uuid } = require('uuid');
module.exports = {
lifecycles: {
beforeCreate: async (data) => {
if (!data.uuid) {
data.uuid = uuid();
}
},
}
};
我需要一个内容类型中的UUID字段,借助下面的介绍我已经修改了文件"MyType.settings.json"。
https://strapi.io/documentation/3.x.x/guides/models.html#define-the-attributes
"uid": {
"default": "",
"type": "uuid"
},
我以为自动保存了一个UUID,但是没有任何反应。
如何定义和使用 UUID 字段?有人可以给我提示吗? 我是否也应该修改文件 \api\MyType\controllers\MyType.js?
提前致谢!
本杰明
您将不得不使用 uuid
节点模块。
所以保留你的属性并在 lifeCyle 函数中,用 lib.
uuid
'use strict';
const uuid = require('uuid');
module.exports = {
beforeCreate: async (model) => {
model.set('uid', uuid());
}
};
您可能还需要一个 v4 UUID,它的生成速度最快 非常 很大余量,并且在所有其他条件相同的情况下,您发生冲突的机会最少(可以是 10 倍甚至更快),这是 99% 的人想要生成 UUID 的原因:
Work in the global UUID community, remain as unique as possible, not collide with anything else.
此外,v4 比 v1 更安全,因为 v1 包括它的制作时间和它是在哪个硬件上创建的,并且具有 疯狂 更高的冲突率,因为今天没有人尊重节点字段并用熵填充它,这破坏了 v1 的全部目的。
使用 v4 而不是 v1 的原因如此明显,以至于应该 public 和广泛传播这些信息。这是白天和黑夜。所有只寻求熵的主要框架现在都使用 v4.
import { v4 as uuid } from "uuid";
// Then just...
const myUUID = uuid()
UUID v1 的创建是因为人们,即使是想出 UUID 的天才计算机科学家,也没有完全理解单独的 128 位地址 space 比花哨的计时和节点跟踪要好得多。 UUID v1 是过度工程的一个很好的例子。
为了在通过 API 和管理 UI 保存实体后自动生成 uuid,请使用模型的 lifecycle
方法,而不是控制器。因此,文件 /api/myType/models/myType.js
可能如下所示:
'use strict';
const { v4: uuid } = require('uuid');
module.exports = {
lifecycles: {
beforeCreate: async (data) => {
if (!data.uuid) {
data.uuid = uuid();
}
},
}
};