node.js - 在模型实例化时无法生成唯一的 UUIDv4
问题描述
我在尝试创建猫鼬模型实例时遇到了与 UUID 相关的问题。
猫鼬模式
export interface IRessourceModel extends IRessource, mongoose.Document { }
export let RessourceSchema: mongoose.Schema = new Schema({
uuid: {
type: String,
default: uuidv4() },
name: {
type: String,
required: true,
minlength: RessourceValidation.CONSTANTS.NAME_MIN_LENGTH,
maxlength: RessourceValidation.CONSTANTS.NAME_MAX_LENGTH,
trim: true,
validate: {
validator: RessourceValidation.name,
message: '{VALUE} is not a valid name'}},
type: {
type: String,
required: true,
enum: RessourceValidation.ENUM.TYPE,
validate: {
validator: RessourceValidation.type,
message: '{VALUE} is not a valid type'}},
uploaded: {
type: Date,
required: true,
default: Date.now }
})
export const Ressource: mongoose.Model<IRessourceModel> = mongoose.model<IRessourceModel>('Ressource', RessourceSchema);
实例化
const RessourceModel = mongoose.model('Ressource');
// Some code here...
let Ressource: any = new RessourceModel({
name: req.body.name,
type: req.body.type,
})
Ressource.save((err, ressource) => {
if (err)
return (APIResponse.jsonErrorAfterMongooseQuery(res, 'Cannot create ressource', err));
APIResponse.json(res, ressource);
})
问题
当我发送/ressources/
使用上面的实例化代码的 POST 请求时,会创建资源,但是如果我发送另一个 POST 请求,则创建的第二个资源具有与第一个相同的 UUID ...
POST 请求 #1 的结果
{
"type": true,
"data": {
"uuid": "1794bbb4-3385-4b0d-909a-e22c60aee608",
"_id": "5b3a42f5ae71a02af4ed6d11",
"name": "Name of ressource 1",
"type": "IMAGE",
"uploaded": "2018-07-02T15:21:25.866Z",
"__v": 0
}
}
POST 请求 #2 的结果
{
"type": true,
"data": {
"uuid": "1794bbb4-3385-4b0d-909a-e22c60aee608",
"_id": "5b3a4530f3ab1f3d40b7ac93",
"name": "Name of ressource 2",
"type": "IMAGE",
"uploaded": "2018-07-02T15:30:56.379Z",
"__v": 0
}
}
我是用default: uuidv4()
错了还是来自我实例化猫鼬模型的方式?还是别的什么?
我确实尝试过从Schema.pre('save')
函数中设置 UUID 但没有成功......
我有点迷茫,谢谢你的帮助!
解决方案
这似乎uuidv4()
是一个字符串。当然,所有型号都一样。
考虑到:
const uuidv4 = require('uuidv4');
Mongoosedefault
模式选项可以接受一个函数来生成一个值:
export let RessourceSchema: mongoose.Schema = new Schema({
uuid: {
type: String,
default: uuidv4
},
...
推荐阅读
- c - 需要帮助确定我需要更改什么以实施所需的更改
- graph - neo4j 找到所有发布了我喜欢的东西的朋友
- c# - 命名空间“Microsoft”中不存在类型或命名空间名称“AspNetCore”
- c# - 检查器中的字符串数组在其他变量的背景中,为什么?
- image-processing - 图像上的 3D 点重投影
- github - GitHub - 在有待处理邀请时更改了用户名 - 对邀请有任何影响吗?
- python - 如何在python中将双引号返回到\"?
- amazon-dynamodb - 实际如何计算写/读容量单位?
- azure-data-factory - 如何使用映射数据流来展平数据湖中 JSON 字符串列的层次结构
- javascript - JS 合并排序,按选择的对象值排序