Node.js始めて10日目
Webpackで作成したjsファイルをレンタルサーバーにアップロードしたいと思います。
今回はftpモジュールを使います。
#インストール
いつものおまじない
npm install ftp
#接続
var Client = require('ftp');
var c = new Client();
c.connect({
host:"ftp.hoge.com",
port:21,//portが21の場合は省略可能
user:"youraccount",
password:"yourpassword"
})
c.on('ready',function(){
console.log("ok");
})
c.on('error',function(err){
console.log(err);
})
c.on('greeting',function(message){
console.log(message);
})
結果:
成功の場合:FTP server ready
失敗の場合:{ [Error: Login incorrect.] code: 530 } 等。
connectメソッドに接続情報をjson形式で渡してあげればOK。
接続成功、失敗についてはイベントで拾う
#FTPコマンドを送る
例えばファイル一覧を取得する例
var Client = require('ftp');
var c = new Client();
c.on('ready', function() {
c.list(function(err, list) {
if (err) throw err;
console.dir(list);
c.end();
});
});
c.connect({/*接続情報*/});
結果は下記のようにJSON形式で返ってきます
{ type: 'd',
name: 'web',
target: undefined,
sticky: false,
rights: { user: 'rwx', group: 'rx', other: 'rx' },
acl: false,
owner: 'your account',
group: 'your account group',
size: 4096,
date: Tue Feb 03 2015 19:21:00 GMT+0900 (東京 (標準時))
}
#リモートディレクトリの階層を移動する
c.on('ready',function(){
c.cwd('hoge',function(err, currentDir) {
if (err) throw err;
c.list(function(err,list){
console.dir(list);
})
});
})
ディレクトリ、hogeに移動して、そのディレクトリのリストを表示する例です。
第二引数、currentDir
は、単にそのディレクトリ名を返すようですが、接続先ftpサーバー次第なようです。私が試したサーバーでは何も返さない(undefined)でした。
#ファイルをダウンロードする
ダウンロードしたデータがstreamで返ってきますので、それをfsで書き込みしてあげるだけです。
var fs = require("fs");
c.get('test.txt', function(err, stream) {
if (err) throw err;
stream.once('close', function() { c.end(); });
stream.pipe(fs.createWriteStream('test.txt'));
});
これでカレントディレクトリに指定したファイルがダウンロードされます。
ここでいうカレントディレクトリは、このjsファイルをコマンドラインから実行(node test
)したときの
カレントディレクトリです
#ファイルをアップロードする
c.on('ready',function(){
c.put('test.js', 'test.js', function(err) {
if (err) throw err;
c.end();
});
})
c.connect({/*接続情報*/});
これでカレントディレクトリにあるファイルがアップロードされます。
ここでいうカレントディレクトリは、このjsファイルをコマンドラインから実行(node test
)したときの
カレントディレクトリです
その他のFTPコマンドもだいたい使用できると思います。試してませんんが、セキュアな接続もできるようです。
詳細については本家ドキュメント(英語)を参照ください。
アップロードするファイルが決まっているのであれば、一つjsファイルを作っておいて
コマンド叩けばアップロードされますから、便利かな。特にwindowsユーザは。