скачать пустой файл в экспресс - PullRequest
0 голосов
/ 27 июня 2019

Я новичок в 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 Ответ

1 голос
/ 27 июня 2019

если fastcsv является потоком, то вам нужно подождать, пока он полностью запишет в ваш файл, затем resolve it.

в соответствии с документацией fast-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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...