首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NodeJS:从sftp服务器读取csv文件并将其转换为JSON

NodeJS:从sftp服务器读取csv文件并将其转换为JSON
EN

Stack Overflow用户
提问于 2019-03-18 13:10:04
回答 1查看 4K关注 0票数 1

我使用ssh2-sftp客户端读取CSV文件并创建ReadableStream。然后,在csvtojson库的帮助下,我尝试将这个readableStream转换为Json。但是,我总是收到以下错误:

TypeError: readStream.pipe不是一个函数

到目前为止,我的代码如下:

代码语言:javascript
复制
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');
});

有人知道我是否正确地使用了这两个库,或者我试图实现的目标是否是不可能的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-18 13:33:45

您将得到一个错误,因为sftp.get返回一个Buffer,并且您试图将它传递给一个需要一个Stream的函数。

将您的代码更改为

代码语言:javascript
复制
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');
});
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55222176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档