我使用ssh2-sftp客户端读取CSV文件并创建ReadableStream。然后,在csvtojson库的帮助下,我尝试将这个readableStream转换为Json。但是,我总是收到以下错误:
TypeError: readStream.pipe不是一个函数
到目前为止,我的代码如下:
let Client = require('ssh2-sftp-client');
let sftp = new Client();
var csv = require("csvtojson");
sftp.connect({
host: 'HOST',
port: 'PORT',
username: 'USERNAME',
password: 'PASSWORD'
}).then(() => {
return sftp.get('/home/user/etc/testfile.csv');
}).then((data) => {
csv()
.fromStream(data)
.subscribe(function (jsonObj) { //single json object will be emitted for each csv line
// parse each json asynchronousely
return new Promise(function (resolve, reject) {
resolve()
console.log(jsonObj);
})
})
}).catch((err) => {
console.log(err, 'catch error');
});有人知道我是否正确地使用了这两个库,或者我试图实现的目标是否是不可能的?
发布于 2019-03-18 13:33:45
您将得到一个错误,因为sftp.get返回一个Buffer,并且您试图将它传递给一个需要一个Stream的函数。
将您的代码更改为
let Client = require('ssh2-sftp-client');
let sftp = new Client();
var csv = require("csvtojson");
sftp.connect({
host: 'HOST',
port: 'PORT',
username: 'USERNAME',
password: 'PASSWORD'
}).then(() => {
return sftp.get('/home/user/etc/testfile.csv');
}).then((data) => {
csv()
.fromString(data.toString()) // changed this from .fromStream(data)
.subscribe(function(jsonObj) { //single json object will be emitted for each csv line
// parse each json asynchronously
return new Promise(function(resolve, reject) {
resolve()
console.log(jsonObj);
})
})
}).catch((err) => {
console.log(err, 'catch error');
});https://stackoverflow.com/questions/55222176
复制相似问题