node.js - Node : Hit endpoint that returns a CSV file and send the contents to client

标签 node.js csv express

我获得了一个返回 CSV 文件的端点。我想到达该端点,读取数据并将其发送给客户端。这就是我现在所拥有的。

app.get('/data', (req, res) => {
  request('foo.com/downloadCSV', (error, response, body) => {
    res.send(csvToJson(body));
  });
});

因此,在前端,我点击“/data”,然后它使用请求库进行调用以获取 CSV 数据。 CSV 的正文位于“body”中。 “csvToJson”函数只是将给定的数据格式化为 arrays/json。

当我在客户端上console.log响应时,我的正文是:ReadableStream,锁定(...)

如何将数据发送给客户端?

编辑:

这是我的 csvToJson 函数:

const csvToJson = (csv) => {
  const content = csv.split('\r');
  const header = content[0].split(',');
  return _.tail(content).map((row) => {
    return _.zipObject(header, row.split(','));
  });
}

最佳答案

我已经尝试过你的代码并且它有效。在公共(public)文件夹中,我创建了sample.csv。

var express = require('express');
var app = express();
var request = require('request');
var _ = require('lodash');

app.use(express.static('public'));

app.get('/data', (req, res) => {
  request('http://localhost:3000/sample.csv', (error, response, body) => {
    res.send(csvToJson(body));
  });
});

const csvToJson = (csv) => {
  const content = csv.split('\n');
  const header = content[0].split(',');
  return _.tail(content).map((row) => {
    return _.zipObject(header, row.split(','));
  });
}

app.listen(3000, function () {
  console.log('Listening on port 3000!')
})

示例.csv 文件:

a,b,c,d
1,2,3,4
2,1,5,6
54,3,1,12
1,2,3,4

结果:

enter image description here

问题可能出在您从其他服务下载的 csv 文件上。

关于node.js - Node : Hit endpoint that returns a CSV file and send the contents to client,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42612587/

相关文章:

node.js, express.js - 提供单个静态文件的最简单方法是什么?

javascript - xml2js,属性名称包含连字符

node.js - Node js - 在上传时配置 aws s3 图像

python - 使用 Tkinter 将用户输入导出到 .csv 文件

javascript - TypeError : res. json 不是函数

javascript - 500 类型错误 : Cannot read property 'name' of undefined WHILE transferring data from html form to Node js server?

javascript - 错误 : fs. readFileSync 不是函数

javascript - 在 Node 项目中添加多个 BigQuery JSON 凭证文件

php - 允许用户将 "Tab-delimited"数据粘贴到文本区域中

javascript - jQuery .each()-确定最后一项[重复项]