【发布时间】:2017-09-25 16:23:22
【问题描述】:
我正在尝试使用 Node.js 使用图片路径和名称填充数据库。 我想做的是以下几点: - 一个函数将图片列表作为 Base64 字符串发送。 - 另一个函数接收此列表,循环遍历它,将其转换为图片并返回路径。
我对 node.js 很陌生,所以我可能会做一些非常愚蠢的事情。
这里是接收代码:
app.post('/chatBot/moreinfo/create', function (req, res) {
returnList = '';
res.set('Content-Type', 'application/json');
//IF LIST IS NOT EMPTY
if (req.body.imgList.length !== 0) {
const imagePath = '/var/lib/SMImageBank/';
const regex = /^data:image\/(.*);.*$/i;
const listePicture = req.body.imgList;
// LOOPING INTO THE LIST
req.body.imgList.map ( function (element) {
const file = element;
const filetype = file.match(regex)[1];
var picLink2 = '';
const base64data = file.replace(/^data:image\/.*;base64,/, "");
const latin1data = new Buffer(base64data, 'base64').toString('latin1');
const filename = new Date().getTime() + '' + new Date().getMilliseconds() + "." + filetype;
fs.mkdir(imagePath, () => {
fs.writeFile(imagePath + filename, latin1data, "latin1", function (err, content) {
if (err) {
routerLog(req, {'type': 'error', 'content': err} );
res.sendStatus(500);
}
else {
if (process.env.NODE_ENV === "production")
picLink2 = 'http://****.fr/image/' + filename;
else if(process.env.NODE_ENV === "test")
picLink2 = 'http://dev.****.fr:8010/image/' + filename;
else if(process.env.NODE_ENV === "master")
picLink2 = 'http://dev.****.fr:8008/image/' + filename;
else{
picLink2 = 'http://*****.com:8008/image/' + filename;
}
}
});
})
console.log(picLink2);
returnList = returnList + ";" + picLink2;
});
}
MoreInfo.create(req.body, function (ret) {
res.send(ret);
routerLog(req);
})
});
我想要做的是能够从 writeFile & mkdir 函数外部访问变量“picLink2”,这样我就可以在每次迭代时填充我的 returnList。显然,由于 node.js 是异步的,我无法从 fs.writeFile() 函数外部访问 picLink2 内容。我知道有很多关于这个的问题,很多答案是将代码放在 writeFile()/readFile() 函数中,但我不知道如何在这里执行,因为 writeFile() 函数是在迭代到列表中的地图内。
我是异步世界的新手,我不知道如何解决这个问题。
【问题讨论】:
标签: node.js asynchronous