2014-10-02 56 views
0

我在节点JS上比较新。我正在研究从服务器获取XML文件的应用程序。 总之我想这样做:从FTP服务器节点JS JSftp获取二进制数据,返回字符串

  1. 下载XML的文件和存储XML的内容作为 字符串。
  2. 以纯文本的形式将字符串返回给浏​​览器。

我能够使用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"); 

回答

0

下载是异步的,所以当你达到
myStrToReturn str.toString( “二进制”); 它的值是未定义的,这就是为什么当你尝试使用toString时你会得到一个错误。

解决方案是使用promise或仅在socket.on中使用mystrToReturn(“close”,...

相关问题