在模型实例化时无法生成唯一的 UUID v4
Trouble generating unique UUIDv4 at model instanciation
我在尝试创建猫鼬模型实例时遇到与 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()
还是它来自于我实例化 mongoose 模型的方式?或者别的什么?
我曾尝试通过 Schema.pre('save')
函数设置 UUID 但没有成功...
我有点迷路了,谢谢你的帮助!
好像uuidv4()
是一个字符串。当然,所有型号都是一样的。
考虑到:
const uuidv4 = require('uuidv4');
Mongoose default
schema option can accept a function 生成一个值:
export let RessourceSchema: mongoose.Schema = new Schema({
uuid: {
type: String,
default: 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()
还是它来自于我实例化 mongoose 模型的方式?或者别的什么?
我曾尝试通过 Schema.pre('save')
函数设置 UUID 但没有成功...
我有点迷路了,谢谢你的帮助!
好像uuidv4()
是一个字符串。当然,所有型号都是一样的。
考虑到:
const uuidv4 = require('uuidv4');
Mongoose default
schema option can accept a function 生成一个值:
export let RessourceSchema: mongoose.Schema = new Schema({
uuid: {
type: String,
default: uuidv4
},
...