我有一个函数,单击按钮即可从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对象。
我已经试过了代码,但是无法正常工作。一些消息来源提到,您需要创建一个读取流以传递到写入流,但是我不确定代码中的哪个位置可以做到这一点。
有人可以帮忙吗?
答案 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);
})
}
基本上,您需要将其转换为字符串,以便使用其他类型,因为您将无法编写对象来编写流。