我是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);
})
})
答案 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));