在渲染的EJS视图中将Mongoose对象转换为CSV

时间:2018-08-13 12:36:30

标签: csv express mongoose ejs

我目前有一个可呈现EJS页面并显示猫鼬查询结果的应用程序。数据作为 queryResults 发送到模板页面。一旦显示了这些结果,我将尝试在底部添加一个按钮,该按钮可将 queryResults 导出到CSV文件。尽管有许多npm软件包可以转换数据,但我不确定如何实现这一点。数据使用以下代码显示在渲染的页面上:

<div class="resultsBox"> 
    <% queryResults.forEach(function(results){ %>
      <div class="col-sm-1">
      <a id="jobRefLink" href="/search/<%= results._id %>">
      <%=results.jobTicket %></a></div>
...
...
...
       </div>
    <% }); %>

<a href="#">Export</a>

我尝试安装各种页面,但是它们似乎都可以在服务器端工作,虽然这不是问题,但是我不确定如何在客户端上实现这些页面并将数据返回适当的路径。

1 个答案:

答案 0 :(得分:1)

您应使用https://www.npmjs.com/package/json2csv包来生成CSV。

代码示例

const Json2csvParser = require('json2csv').Parser;
  //const fields = ['car', 'price', 'color'];
  const fields = [{
                      "label": 'Car Name',
                      "value": 'car'
                    },{
                      "label": 'Price USD',
                      "value": 'price'
                    },{
                      "label": 'color Color',
                      "value": 'color'
                    }
                    ];

  const myCars = [
    {
      "car": "Audi",
      "price": 40000,
      "color": "blue"
    }, {
      "car": "BMW",
      "price": 35000,
      "color": "black"
    }, {
      "car": "Porsche",
      "price": 60000,
      "color ff": "green"
    }
  ];

  const json2csvParser = new Json2csvParser({ fields });
  const csv = json2csvParser.parse(myCars);

  res.setHeader("Content-Type", "application/csv");
  res.setHeader("Content-Length" , csv.length);
  res.setHeader("Content-type" ,"text/x-txt; charset=utf-8");
  res.setHeader("Content-Disposition", "attachment; filename=surveyresponse.csv");
  res.render('export', { listData: csv });;

res标头将生成csv。并且在export.ejs文件上只写

<%- listData %> then it will download as a csv.