『Nodejs入門』にはコードの問題があります.

2304 ワード

『Nodejs入門』という本は確かにいい入門工具書ですが、その中のコードはやはり私達の実際の開発環境と違っています.例えば、この本の最後の例をサーバーにアップロードします.
 
問題の一部のソースコードは以下の通りです.
 
 
function upload( res, req){
    console.log("request upload mehtod");
    
    var form = new formidable.IncomingForm();

    form.parse( req, function( error, fields, files){
       
	fs.renameSync(files.upload.path, "tmp/"+filename+".png");
        
        res.writeHead(200,{"Content-Type":"text/html"});
        res.write("<img src='/show'/>");   //  /show  
        res.end();
    });
}
 ここではformidableの第三者モジュールを使用しています.上のコードはいつもエラーを報告します.
formidableのデフォルトアップロードファイルの保存経路はプロジェクトパスと同じパスにないからです.私のプロジェクトはeディスクにあります.form.uplloadDir="tmp"を設定する必要があります./プロジェクトのtmpフォルダを指します.
 
また、fs.renameSync()保存ファイルは異常を投げます.プログラムを正常に動作させるために、try{}catch(e){}を追加します.
 
画像をアップロードしながら、フロントの入力ボックスに名前を設定したいですが、バックグラウンドはformidableでどうやってこのフィールドの値を取得しますか?
 
 
...
form.parse(req, function(error, fields, files){
    
    //filename <input>   name    
    var filename = fields["filename"];  

     ...

});
...
 
上記の通り、upload方法の完全なコードです.
 
 
function upload( res, req){
    console.log("request upload mehtod");
    
    var form = new formidable.IncomingForm();
    form.uploadDir = "tmp";
    form.parse( req, function( error, fields, files){
        console.log("parsing done");
        var filename = fields['filename'];
	console.log("filename = " + filename);
        
        try{
	    fs.renameSync(files.upload.path, "tmp/"+filename+".png");
        }catch( e){
            console.log(e);
        }
        res.writeHead(200,{"Content-Type":"text/html"});
        res.write("<img src='/show'/>");   //  /show  
        res.end();
    });
}