3

我有下一个任务:

我的服务器中的一个请求想要获取一个带有统计信息的 csv 文件。我有 JSON 结构。使用模块https://github.com/wdavidw/node-csv,我从我的 json 创建一个 csv 结构。问题是:如何将其发送给具有正确 mime 类型(文本/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);
  });
4

5 回答 5

5

好的,我找到了一个解决方案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);

也许你可以告诉我实现它的最佳方式。

于 2013-10-17T15:27:56.963 回答
2

可能会帮助希望使用 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')
于 2019-07-02T22:27:20.633 回答
1

我相信在提出这个问题时,返回文件的 API 可能不可用。但是,您可以使用以下方法提供静态文件:

1-界面file上的方法。reply

reply.file('./path/to/file');

2-直接指定文件处理程序:

server.route({
    method: 'GET',
    path: '/picture.jpg',
    handler: {
        file: 'picture.jpg'
    }
});

请查看此 Hapi教程以获取详细说明。

于 2015-07-29T13:41:18.657 回答
0

您可以使用目录 :) 在 hapi 9.x 不再与 hapi 集成之后,您可以要求并使用它。

检查http://hapijs.com/tutorials/serving-files#directory-handler了解更多信息

于 2015-11-04T18:57:33.693 回答
0

用这个

file="path/to/your/csvFile.csv"
return h.file(file,{mode:'attachment',type:'text/csv'})
于 2019-05-07T05:28:47.927 回答