【问题标题】:node.js writeFileSyncnode.js writeFileSync
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 我之前尝试过,如果我尝试在 wrifteFileSync() 之外记录它,我仍然会得到一个空字符串。
    猜你喜欢
    • 2020-01-29
    • 2020-10-29
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    相关资源
    最近更新 更多