Node JS JSftp获取二进制数据,返回字符串

时间:2014-10-02 09:12:40

标签: javascript xml node.js ftp

我在Node JS上比较新。我正在开发一个从服务器获取XML文件的应用程序。 总之,我想这样做:

  1. 从FTP服务器下载XML文件并将XML内容存储为 串。
  2. 以纯文本格式将字符串返回给浏​​览器。
  3. 我可以使用jsftp.get将文件下载到本地目录,但我无法将下载的数据作为字符串。

    我做错了什么?

    我的代码是这样的:

    var http = require("http");
    var url = require("url");
    var JSFtp = require("jsftp");
    var myStrToReturn = new String();
    
    
    http.createServer(function(req, res) {
    
      // URL
      var parsedUrl = url.parse(req.url, true);
      var queryAsObject = parsedUrl.query;
    
      var str = new String();
      var myFunction = queryAsObject["function"];
    
      var Ftp = new JSFtp({
      host: "ftp.ftp.ftp",
      port: 21, // defaults to 21
      user: "user", // defaults to "anonymous"
      pass: "passwd", // defaults to "@anonymous"
      debugMode: true
    
    });
    
    var str = "";
    Ftp.get("Production/Offers/datafile.xml", function(err, socket) {
    
        if (err) return;
        socket.on("data", function(d) { str += d.toString(); })
        socket.on("close", function(hadErr) {
          if (hadErr)
            console.error('There was an error retrieving the file.');
        });
        socket.resume();
      });
        myStrToReturn = str.toString("binary");
    
        res.writeHead(200, {
            'Content-Encoding':'utf-8',
            'charset' : 'utf-8',
            'Content-Type': 'text/plain;charset=utf-8'});
        res.write(myStrToReturn.toString());
        res.end();
    
    console.log(myStrToReturn);
      });
    
    Ftp.on('jsftp_debug', function(eventType, data) {
      console.log('DEBUG: ', eventType);
      console.log(JSON.stringify(data, null, 2));
    });
    
    }).listen(8030);
    
    console.log("Server listening on port 8030");
    

1 个答案:

答案 0 :(得分:0)

下载是异步的,所以当你到达时     myStrToReturn str.toString(" binary");  它的值是未定义的,这就是当你尝试使用toString时会出现错误的原因。

解决方法是使用promises或仅在socket.on中使用mystrToReturn(" close",...