node.js writeFileSync

时间:2017-09-25 08:12:25

标签: node.js asynchronous

我试图用图片路径填充数据库&使用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中。

我是异步世界的新手,我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

如果不影响性能,请使用writeFileSync进行同步操作。