我试图用图片路径填充数据库&使用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);
})
});
我想要做的是能够访问变量" picLink2"来自writeFile&的外部mkdir函数,所以我可以在每次迭代时填充我的returnList。显然,当node.js是异步的时,我无法从fs.writeFile()函数外部访问picLink2内容。我知道对此有很多疑问,很多答案都是将代码放在writeFile()/ readFile()函数中,但我不知道自从writeFile()以来我在这里怎么做function在迭代到列表的map中。
我是异步世界的新手,我不知道如何解决这个问题。
答案 0 :(得分:0)
如果不影响性能,请使用writeFileSync
进行同步操作。