是否可以在填充猫鼬中将缓冲区转换为 base64string?
Posted
技术标签:
【中文标题】是否可以在填充猫鼬中将缓冲区转换为 base64string?【英文标题】:Is it possible to convert a buffer to base64string in populate mongoose? 【发布时间】:2021-09-03 21:17:07 【问题描述】:我有一个如下的猫鼬图像架构:
const ImageSchema = new mongoose.Schema(
img:
data: Buffer,
contentType: String
)
mongoose.model('Image',ImageSchema)
和章节架构
const chapterSchema = new mongoose.Schema(
chapter_no: type: Number, min: 0, max: 50 ,
published:Boolean,
u_img:type:mongoose.Schema.Types.ObjectId, ref:"Image"
)
mongoose.model('Chapter', chapterSchema)
我会为图片做人口统计
Chapter.find()
.populate(
path:"u_img",
select:["img"]
)
.exec(function(err,chapters)
if(err) res.send(err)
res.send(chapters)
)
我正在尝试将本章中每个图像的缓冲区转换为 base64string。 有人可以帮我吗?有没有办法在猫鼬中对填充函数进行转换?或者我必须在 exec func 中映射并进行转换?还是有其他方法?
【问题讨论】:
【参考方案1】:嗯,populate
关注的领域更多是关于将相关文档(在您的情况下为给定章节的图像)拼接在一起,而不是将这些文档按摩成某种可用状态。
不过,有一个选项可能对您有所帮助 (introduced in Mongoose 5.12):
[options.transform=null]
«Function» Mongoose 将调用的函数 在每个填充的文档上,允许您转换填充的 文件。
所以你可以像这样修改你的查询:
Chapter.find()
.populate(
path:"u_img",
select:["img"],
options:
transform: doc => new Buffer(doc.data).toString('base64')
)
作为替代方案,您可以在 exec
函数中对拼接实体进行这种转换,如下所示:
.exec(function(err, chapters)
if(err) res.send(err)
chapters.forEach(chapter =>
chapter.img = new Buffer(chapter.img.data).toString('base64');
);
res.send(chapters)
)
...基本上遵循here的收据。
【讨论】:
转换的效果很好!太感谢了。我只需要将 Buffer 的参数指定给 doc.img.data 非常感谢! 添加注释:不能对子文档应用转换以上是关于是否可以在填充猫鼬中将缓冲区转换为 base64string?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C++17 中将 std::string 转换为 std::vector<std::byte>?
如何在 Python 中将“托管缓冲区”转换为 Callable
在 Python 中将 PNG 转换为二进制(base 2)字符串
在 Javascript 中将 PDF 转换为 Base64 编码的字符串
如何在 Swift 3 中将 captureStillImageAsynchronously(sampleBuffer) 转换为 base64 编码