NodeJS: считывает csv-файл с sftp-сервера и конвертирует его в JSON

#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 асинхронно … если кто-нибудь будет достаточно любезен, дайте мне знать пример 🙂