gpt4 book ai didi

express - Mongoose 和引用 UUID 数组不转换

转载 作者:太空宇宙 更新时间:2023-11-04 01:25:36 25 4
gpt4 key购买 nike

使用 mongoose-uuid 库时,我可以为模式设置 UUID 类型,因此当我读取数据时,它采用字符串 (utf-8) 格式,而当我保存数据时,它采用 UUID ObjectID BSON 类型 4 格式。这对于我的架构中的顶级或平面直接值和引用定义非常有效。但是,当我在架构中的引用数组中有 UUID 时,该数组会正确保存到数据库,但是当它呈现时,它是原始类型。根据下面的示例,您可以看到scope_id以正确的格式显示,但权利却不然。

以下是我正在使用的版本: Mongoose uuid - 2.3.0 Mongoose - 5.5.11

我尝试通过更改 getter 和转换值来修改库(mongoose-uuid),但是,当我这样做时,它在呈现时有效,但在保存到数据库时失败。这很可能是由于在保存到数据库之前对该值进行了转换或转换。

这是一个示例架构

    {
"code": {
"type": String,
"required": true
},
"scope_id": {
"type": mongoose.Types.UUID,
"ref": "scopes"
},
"entitlements": [{
"type": mongoose.Types.UUID,
"ref": "entitlements"
}]
}

实际响应示例

{
"entitlements": [
"zMihi1BKRomM1Q41p7hgLA==",
"ztOYL7n1RoGA6aoc0TcqoQ=="
],
"code": "APPUSR",
"scope_id": "b8f80c82-8325-4ffd-bfd7-e373a90e7c45",
"id": "32e79061-e531-45ad-b934-56811e2ad713"
}

预期响应

{
"entitlements": [
"ccc8a18b-504a-4689-8cd5-0e35a7b8602c",
"ced3982f-b9f5-4681-80e9-aa1cd1372aa1"
],
"code": "APPUSR",
"scope_id": "b8f80c82-8325-4ffd-bfd7-e373a90e7c45",
"id": "32e79061-e531-45ad-b934-56811e2ad713"
}

最佳答案

如上所述,代码确实可以工作,但破坏了代码的另一部分。我找到了解决此问题的解决方案:

对上面的代码稍作修改

SchemaUUID.prototype.cast = function (value, doc, init) {

console.log("cast", value, doc, init)

if (value instanceof mongoose.Types.Buffer.Binary) {
if (init && doc instanceof mongoose.Types.Embedded) {
return getter(value);
}
return value;
}

if (typeof value === 'string') {
var uuidBuffer = new mongoose.Types.Buffer(uuidParse.parse(value));

uuidBuffer.subtype(bson.Binary.SUBTYPE_UUID);

return uuidBuffer.toObject();
}

throw new Error('Could not cast ' + value + ' to UUID.');
};

此代码的替代版本允许应用 POST 和 PATCH 等更新。

关于express - Mongoose 和引用 UUID 数组不转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57641291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com