2017-03-05 2 views
0

CSVファイルを返すエンドポイントが指定されています。そのエンドポイントに到達し、データを読んでクライアントに送信したい。これは今私が持っているものです。ノード:CSVファイルを返し、その内容をクライアントに送信するヒットエンドポイント

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

私はフロントエンドで「/ data」をクリックし、リクエストライブラリを使用してCSVデータを取得します。 CSVの本体は「本体」にあります。 'csvToJson'関数は配列/ 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(',')); 
    }); 
} 
+0

クライアントに送信する前に本体をチェックしてください。また、errores/responseに役立つ情報があるかもしれません。 – Myonara

+0

本文は私が欲しいものを正確に表示しています – user2465134

答えて

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ファイルです。

+0

エラーを取得する:jsonStream.onは機能ではありません。私は編集で自分のcsvToJson関数を投稿しました – user2465134

+0

csvからjsonへの変換にはどのライブラリを使用しますか? – hya

+0

私は何も使っていませんでした。私はロダッシュを使った機能を見つけました。その機能は元の投稿にあります。 – user2465134

0

は、フロントエンドに反応マイ:

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を終了し、そこからデータを取得します。

関連する問題