事象
ローカルで作ってたNodeのプログラムをVPSにアップロードしたところ、リネーム処理でコケた。
コード
実際のコードはこんな感じ。
(抜粋)
var fs = require('fs');
fs.rename("hoge.txt", "fuga.txt", function (err) {
if(err){
//異常処理へ
}else{
//正常処理へ
}
});
ローカルだとうまくいってたんだけどなぁ
Node.jsのバージョン、npmのバージョンも合わせてある状態。
Node.js : v8.11.1
npm : 5.6.0
解決策
StreamAPIでファイルをコピーしてあげて、コピー完了後に元ファイルを消すと言ったやり方で解決。
var fs = require('fs');
fs.createReadStream("hoge.txt").pipe(fs.createWriteStream("fuga.txt")).on('finish',function(err){
if(err){
//異常処理へ
}else{
//コピーが完了
fs.unlink("hoge.txt", function(err){
//ファイル削除完了
});
}
});
ちょっとネストが深くなってしまうが何かいい方法は無いものなのか。
StreamAPIの使い方がよくわからないから、もっと勉強しないとな。