渲染 EJS 视图中的 Mongoose 对象到 CSV

Posted

技术标签:

【中文标题】渲染 EJS 视图中的 Mongoose 对象到 CSV【英文标题】:Mongoose Object to CSV in Rendered EJS view 【发布时间】:2019-01-20 04:42:21 【问题描述】:

我目前有一个应用程序,它呈现一个 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】:

您应该使用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.

【讨论】:

数据已经渲染到页面了。然后我将如何使用它来导出到 csv? 我编辑最后一行代码 res.render('export', listData: csv );制作一个 export.ejs 文件,然后它将作为 csv 文件下载

以上是关于渲染 EJS 视图中的 Mongoose 对象到 CSV的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 express .node 、 mongoose 和 ejs 删除对象

JSON从EJS到JS中的JSON对象

我想使用 Jquery .change(function... (JS, EJS, Mongoose, Express) 显示数组中的特定项目

如何在渲染 ejs 视图 Node.js 时捕获错误

从同一数据库mongoose,ejs中的另一个集合中获取数据

如何在 Mongoose/Node 中同时渲染多个变量?