节点:命中端点,返回CSV文件并将内容发送到客户端

时间:2017-03-05 18:56:05

标签: 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'函数只是将数据格式化为数组/ json。

当我在我的客户端上安装响应时,我的身体是: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(','));
  });
}

2 个答案:

答案 0 :(得分:0)

我已经尝试过您的代码,但它确实有效。在公共文件夹中,我创建了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!')
})

Sample.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文件。

答案 1 :(得分:0)

My React前端:

componentDidMount() {
  fetch('/data').then(response => {
    var decoder = new TextDecoder();
    var reader = response.body.getReader();

    // read() returns a promise that resolves
    // when a value has been received
    reader.read().then(function processResult(result) {
      if (result.done) return;
      console.log(
        decoder.decode(result.value, {stream: true})
      );

      // Read some more, and recall this function
      return reader.read().then(processResult);
    });
  });
}

这将结束ReadableStream并从中获取数据。