我将产品映像存储为MongoDB上的base64缓冲区。使用“ productImagePath”下面的此虚拟类型,此功能可以正常工作:
productSchema.virtual('productImagePath').get(function () {
if (this.productImage != null && this.productImageType != null) {
return `data:${this.productImageType};charset=utf-8;base64,${this.productImage.toString('base64')}`
});
对于我的购物车,我正在使用Passport Session来存储购物车中的产品。我现在知道虚拟类型不会在会话中显示,但我想在购物车中的产品旁边放置产品图像(作为缩略图)。本质上,我想使用购物车中的产品数据来重新创建虚拟类型。一切都在那里,但需要像上面的代码一样放回去。我陷入尝试访问数据库上的productImage缓冲区并将其解码为toString('base64')的问题。
以下是我们在购物车会话中对productImage进行调试的样子: productImage
我尝试重新创建如下字符串:
var productImagePath = "data:" + this.items[id].productImageType + ";charset=utf-8;base64," + this.items[id].productImage.toString('base64');
为了将其推入购物车数组。我收到错误: “ TypeError:无法读取未定义的属性'toString'” 然后,我尝试了以下操作:
let data = this.items[id].productImage;
let buff = Buffer.from(data);
let base64data = buff.toString('base64');
我收到此错误“ TypeError [ERR_INVALID_ARG_TYPE]:第一个参数必须是字符串,Buffer,ArrayBuffer,Array或类似数组的对象中的一个。收到的类型未定义”
productImage绝对是一种类型:缓冲区(如在链接的图像中看到的-没有足够的点来嵌入实际图像)。为什么我不能访问此变量并对其进行解码?