【发布时间】:2021-03-02 18:42:13
【问题描述】:
您好,我在 GET 请求中发送 base64 数据时遇到问题。 我成功地将图像转换为 base64 数据并将其插入 receivedFile 但是在响应过程中,附件是一个空数组,而其余数据(即 user_id)正在成功流动。
因此,如果您能帮我解决这个问题。
下面是代码
路由器.js
router.get('/users/data/expand/:nid',async (req,res) => {
var idselected = req.params.nid;
var dir = '\images';
var receivedFile = [];
try {
const checkData = await user.find({"user_id": idselected});
await checkData[0].attachments.forEach (element => {
fs.readdir(dir,function(err,files) {
if(err) {
console.log(err)
}else {
files.forEach((filename) => {
filename = element;
fs.readFile(filename,'base64', (err,base64Data) => {
if(err) {
console.log(err);
}
receivedFile.push(base64Data);
})
})
}
})
})
//issue is here the attachments is coming as empty instead of base64 data
const returnUser = new User({
user_id: checkData.user_id,
attachments: receivedFile
})
res.status(201).send(returnUser);
}
catch(e) {
res.status(500).send(e)
}
})
【问题讨论】:
-
forEach方法总是返回undefined所以awaiting 它的行为可能不符合您的预期。您可以使用fs.readdir和fs.readFile的承诺版本并在那里使用await来修复它。 -
嗨 Diego 尝试了你推荐的方法,但仍然遇到问题
-
下面是我所做的更改: fs.promises.readdir(dir,function(err,files) fs.readFileAsync (filename , {encoding:'base64'} , (err,base64Data )
-
我在 GET 请求之前添加了这个: const util = require('util'); fs.readFileAsync = util.promisify(fs.readFile);
-
我无法从您发送的消息中知道您的代码是什么样的。但是,您是否也将
await添加到了 fs 相关的函数调用中。