2013-10-17 85 views
2

我的下一個任務:在我server想獲得與統計CSV文件哈皮JS文件發送

一個請求。我有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); 
    }); 

回答

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

或者,你可以使用:回覆(數據)。類型(「文本/ CSV」) – RichS

+0

你如何定義發送到客戶端文件的名字?答覆(數據).type('文本/ csv')工作正常,但發送一個沒有擴展名的「csv」文件,我想自己生成名稱。 – Vadorequest

1

我相信在提出這個問題時,返回文件的API可能不可用。但是,可以使用以下方法提供靜態文件:

1-在reply接口上的file方法。

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

2 - 直接指定一個文件處理程序:

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

看一看這個哈皮tutorial了詳細的解釋。