Hapi JS发送文件

时间:2013-10-17 13:36:02

标签: javascript node.js csv mime-types hapijs

我有下一个任务:

我的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);
  });

5 个答案:

答案 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')