ftp module
FTP是很傳統但是卻很好用的連線技術,在Browser中,ftp跟http有同樣的地位,可以直接作為檔案下載用,而node.js中,request模組作為http協定資料下載很OK,但是要讀取ftp的資料就必須要透過ftp協定相容的模組,node-ftp這個專案是專門作為ftp用途的node.js套件,使用上簡單,也可以串連其他streaming模組ㄛ!
Github repository
https://github.com/mscdex/node-ftp
Installation
npm install ftp
Sample Usage
官網上說明相當詳細,下面介紹幾個簡單的應用範例:
透過ftp模組抓檔案
ftp.cmegroup.com是美國地區一家公司所提供的marketing data下載的地方,他以ftp協定將鏈結公布在網路上,讓瀏覽者可以點選下載... 這邊以該服務的某個資源位置(ftp://ftp.cmegroup.com/pub/settle/comex_future.csv)為例做下載動作...
var Client = require('ftp');
var fs = require('fs');
var c = new Client();
var connectionProperties = {host: "ftp.cmegroup.com"};
c.on('ready', function () {
console.log('ready');
c.get('/pub/settle/comex_future.csv', function(err, stream) {
if (err) throw err;
stream.once('close', function() { c.end(); });
stream.pipe(fs.createWriteStream('data.csv'));
});
});
c.connect(connectionProperties);
上面程式碼主要需要在連線時指定connection server位置,也就是ftp server,因為該服務不用提供帳號密碼,在此即無需要將帳號密碼設定在"connectionProperties"中。而連線ready狀態完成後,即可以做資料下載動作...
透過ftp模組串接http模組
由於ftp模組有時做pipe串聯串流物件,因此可以透過一些改寫將服務內嵌http協定中,讓http連線的資料透過該server直接存取ftp網站的資料
這邊分成兩支程式:
ftp存取主程式 - ftputil.js
var Client = require('ftp');
var fs = require('fs');
function getData(req, res) {
var c = new Client();
var connectionProperties = {host: "ftp.cmegroup.com"};
c.on('ready', function () {
console.log('ready');
c.get('/pub/settle/comex_future.csv', function(err, stream) {
if (err) throw err;
stream.once('close', function() { c.end(); });
stream.pipe(res);
});
});
c.connect(connectionProperties);
}
exports.getData = getData;
express主程式 - app.js
這邊僅就routing部分描述,讓"/test"路由可以存取ftp物件...
var test = require('./test');
app.get('/test', function(req, res) {
test.getData(req, res);
});
測試:
curl http://localhost:3000/test
原則上測試結果相當於ftp所見內容...