从节点writestream下载压缩文件

时间:2019-12-20 08:40:10

标签: node.js

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

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对象。

我已经试过了代码,但是无法正常工作。一些消息来源提到,您需要创建一个读取流以传递到写入流,但是我不确定代码中的哪个位置可以做到这一点。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分: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);

    })
}

基本上,您需要将其转换为字符串,以便使用其他类型,因为您将无法编写对象来编写流。