快速下载空文件

时间:2019-06-26 22:31:49

标签: node.js express post

我是node.js的新手,任何人都可以帮助我编写代码。下面的代码可以将查询结果写入服务器端的“ public / out.csv”文件中,但会将空白内容下载到客户端中。我不知道为什么会这样。

function ouputCSV(data, filename){
   return new Promise(function(resolve, reject){
   console.log('writes the results into csv file');
   const ws = fs.createWriteStream('public/'+filename+'.csv');
   fastcsv.write(data, {headers: true, delimiter:'\t'})
          .pipe(ws);
   var filepath = ws.path;
   resolve(filepath);
})

con.query(sql, function(err, result){
   if (err) throw err;

   var filename = ('out');
   var promise = ouputCSV(result,filename);

   promise.then(function(file){
      res.download(file);
   })
})

1 个答案:

答案 0 :(得分:1)

如果fastcsv是流,那么您需要等待它完全写入文件,然后resolve将其写入文件。

根据快速csv文档,您可以执行以下操作:

const rows = [
    [ 'a', 'b' ],
    [ 'a1', 'b1' ],
    [ 'a2', 'b2' ],
];
csv.writeToPath(path.resolve(filepath), rows)
    .on('error', err => console.error(err))
    .on('finish', () => {
                          console.log('Done writing.')
                           resolve(filepath);
                         });

或者您可以在resolve事件中end

fastcsv.write(data, {headers: true, delimiter:'\t'})
      .pipe(ws);
var filepath = ws.path;
fastcsv.on('end', ()=> resolve(filepath));