我有下一个任务:
我的server中的一个请求想要获取带统计信息的csv文件。我有JSON结构。使用模块https://github.com/wdavidw/node-csv,我从json创建了一个csv结构。问题是:如何使用正确的mime类型(text / csv)将其发送给用户?
var arr = [["date,shop_id,product_id,count"]];
_.each(res, function(date) {
_.each(date.unknown_products, function(count, product) {
arr.push([date.date + ',' + id + ',' + product + ',' + count ]);
});
});
csv()
.from.array(arr)
.to(function (data) {
console.info(data); // => correct csv
// "date,shop_id,product_id,count"
// "2013-10-01,1,123,312"
response += data;
})
.on('end', function (count) {
console.log('Number of lines: ' + count); // => Number of lines: 33878
//request.reply(new Hapi.response.Obj(response, 'text/csv'));
request.reply(response);
});
答案 0 :(得分:2)
好的,我找到了使用Hapi.response.Stream
的解决方案:
var stream = csv().from.array(arr, {
columns: ["date", "shop_id", "product_id", "count"]
});
var response = new Hapi.response.Stream(stream);
response.type('text/csv');
request.reply(response);
也许你可以告诉我实现它的最好方法。
答案 1 :(得分:1)
我相信在提出此问题时,返回文件的API可能无法使用。但是,您可以使用以下方法提供静态文件:
1- file
界面上的reply
方法。
reply.file('./path/to/file');
2-直接指定文件处理程序:
server.route({
method: 'GET',
path: '/picture.jpg',
handler: {
file: 'picture.jpg'
}
});
请查看此Hapi tutorial以获取详细说明。
答案 2 :(得分:1)
你可以使用目录:) hapi之后9.x不再与hapi集成,但你可以要求并使用它。
检查http://hapijs.com/tutorials/serving-files#directory-handler以获取更多信息
答案 3 :(得分:0)
使用此
file="path/to/your/csvFile.csv"
return h.file(file,{mode:'attachment',type:'text/csv'})
答案 4 :(得分:0)
可能会帮助希望使用Hapi V18响应CSV文件流的人们。
const stringify = require('csv-stringify')
const stream = stringify(arrayOfObjects, { header: true })
return h.response(stream)
.type('text/csv')
.header('Connection', 'keep-alive')
.header('Cache-Control', 'no-cache')
.header('Content-Disposition', 'attachment;filename=myfilename.csv')