【问题标题】:Downloading a zipped file from node writestream从节点 writestream 下载压缩文件
【发布时间】:2019-12-20 16:47:41
【问题描述】:

我有一个函数可以通过单击按钮从 postgres 获取 json 数据。我想要的是将该数据保存在一个压缩文件中。我是 nodeJS 的新手,所以我不完全确定 writestreams 和管道是如何工作的。这就是我所拥有的:

module.exports.fileDownload = function(req, res){
  var id = req.query.id;
  postgresService.getJsonData(id)
    .then(response => {
      const writer = fs.createWriteStream('my_file.json');

      // logger.info(response);
      // logger.info(writer);

      writer.write(response)

      res.pipe(writer);

    })
    .catch(err => {
      logger.info('Something went wrong');
      logger.info(err);

    })
}

我想一旦我至少获得了文件,我就会想出一种使用 zlib 的方法,但即使在这个阶段,虽然我的记录器正确地显示了响应和编写器,但它最终还是出现在了 catch 块中。我一直看到的错误是:

TypeError [ERR_INVALID_ARG_TYPE]:“块”参数必须是字符串或缓冲区类型之一

我应该提到响应是一个相当大的 json 对象。

我已经玩过代码,但无法让它工作。一些消息来源提到您需要创建一个读取流以通过管道传输到写入流,但我不确定在我的代码中的哪个位置执行此操作。

谁能帮忙?

【问题讨论】:

  • 你试过JSON.stringify ing js obejct 吗?

标签: node.js


【解决方案1】:

试试这个

module.exports.fileDownload = function(req, res){
  var id = req.query.id;
  postgresService.getJsonData(id)
    .then(response => {
      const writer = fs.createWriteStream('my_file.json');

      // logger.info(response);
      // logger.info(writer);

      writer.write(JSON.stringify(response));

      res.pipe(writer);

    })
    .catch(err => {
      logger.info('Something went wrong');
      logger.info(err);

    })
}

基本上你需要把它转换成字符串,这样你就不能写一个对象来写流了。

【讨论】:

  • 感谢您的回答。会试试这个。
  • 这确实是导致错误的问题。所以感谢你让我走上正轨。 +1。仍然无法让它工作。当我知道更多时,我会更新我的问题。
猜你喜欢
  • 2016-03-07
  • 1970-01-01
  • 2014-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多