Javascript Mongoose自动将二进制数据转换为base64
我遇到猫鼬/猫鼬的一些奇怪行为 我的数据模式是:Javascript Mongoose自动将二进制数据转换为base64,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我遇到猫鼬/猫鼬的一些奇怪行为 我的数据模式是: photo: {data: Buffer, contentType: String} let upload = (req, res) => { User.findByIdAndUpdate(req.params.id, { photo: fs.readFileSync(`uploads/${req.file.originalname}`) }, {safe: true, new: true}) .exec()
photo: {data: Buffer, contentType: String}
let upload = (req, res) => {
User.findByIdAndUpdate(req.params.id, { photo: fs.readFileSync(`uploads/${req.file.originalname}`)
}, {safe: true, new: true})
.exec()
.then(() => {
sendJsonResponse(res, 200, {"message": "photo uploaded"})
})
.catch(err => {
sendJsonResponse(res, 500, err)
})
};
我使用以下代码向mongoose上传了一张图像:
photo: {data: Buffer, contentType: String}
let upload = (req, res) => {
User.findByIdAndUpdate(req.params.id, { photo: fs.readFileSync(`uploads/${req.file.originalname}`)
}, {safe: true, new: true})
.exec()
.then(() => {
sendJsonResponse(res, 200, {"message": "photo uploaded"})
})
.catch(err => {
sendJsonResponse(res, 500, err)
})
};
上面的程序成功上传了一个图像,如下所示:
photo: {data: Buffer, contentType: String}
let upload = (req, res) => {
User.findByIdAndUpdate(req.params.id, { photo: fs.readFileSync(`uploads/${req.file.originalname}`)
}, {safe: true, new: true})
.exec()
.then(() => {
sendJsonResponse(res, 200, {"message": "photo uploaded"})
})
.catch(err => {
sendJsonResponse(res, 500, err)
})
};
奇怪的行为:
photo: {data: Buffer, contentType: String}
let upload = (req, res) => {
User.findByIdAndUpdate(req.params.id, { photo: fs.readFileSync(`uploads/${req.file.originalname}`)
}, {safe: true, new: true})
.exec()
.then(() => {
sendJsonResponse(res, 200, {"message": "photo uploaded"})
})
.catch(err => {
sendJsonResponse(res, 500, err)
})
};
据我所知,mongoose/mongoDB将二进制数据
返回为二进制数据
,用户必须将其转换为base64字符串
,然后才能使用。我错了吗
在我的例子中,当我从mongoose中提取数据时,我不会得到二进制数据。我得到转换后的base64
请注意,我没有在任何地方放置任何转换二进制数据的代码。
下面是返回数据的图像:
在将数据返回到用户I控制台之前。日志
我的数据服务器端:
photo: {data: Buffer, contentType: String}
let upload = (req, res) => {
User.findByIdAndUpdate(req.params.id, { photo: fs.readFileSync(`uploads/${req.file.originalname}`)
}, {safe: true, new: true})
.exec()
.then(() => {
sendJsonResponse(res, 200, {"message": "photo uploaded"})
})
.catch(err => {
sendJsonResponse(res, 500, err)
})
};
我的问题:
photo: {data: Buffer, contentType: String}
let upload = (req, res) => {
User.findByIdAndUpdate(req.params.id, { photo: fs.readFileSync(`uploads/${req.file.originalname}`)
}, {safe: true, new: true})
.exec()
.then(() => {
sendJsonResponse(res, 200, {"message": "photo uploaded"})
})
.catch(err => {
sendJsonResponse(res, 500, err)
})
};
谁能解释一下是什么原因造成的
mongoose是否能够自动转换二进制数据
这是否意味着我不需要实现“从二进制到base64”的转换代码
如果猫鼬能够自动做到这一点,那就太棒了!但我不知道这是一个bug还是一个特性。我认为最好在Mongoose Github问题的追踪器上问这样的问题