2014-10-02 102 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」,...

相關問題