#node.js #sftp #ssh2-sftp
#node.js #sftp #ssh2-sftp
Вопрос:
Я использую ssh2-sftp-client для чтения CSV-файла и создания ReadableStream. Затем я пытаюсь преобразовать этот доступный для чтения поток в Json с помощью библиотеки csvtojson. Однако я всегда получаю следующую ошибку:
Ошибка типа: 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');
});
Кто-нибудь знает, правильно ли я использую обе библиотеки или это невозможно, чего я пытаюсь достичь?
Ответ №1:
Вы получаете сообщение об ошибке, потому что 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');
});
Комментарии:
1. Я пытаюсь сделать то же самое, но понятия не имею, что анализировать после .Subscribe .. // разбирать каждый json асинхронно … если кто-нибудь будет достаточно любезен, дайте мне знать пример 🙂