Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

express4でダウンロード機能を実装する

express4のアプリでも、ダウンロード機能を実装できます。
集計した結果を利用ユーザに渡すだとか、内製ツールでは割りと使いそうな処理ですね。

実際のところ

以前書いたapp.jsの'/user/:id/:page'にアクセスした時、spawn.jsをダウンロードさせる場合を想定します。
追加の要件として

  • file_{pageNUM}.jsと改名
  • エラーを通知
  • ダウンロードが終わったら、コンソールにログ

というケースを想定した実装は以下の通り。

app.route('/user/:id/:page')                                                             
    // 中略
    .get(function (req, res) {                                                           
        var fileURL = '/Users/shuzo_kino/node/statictest/spawn.js';                      
        var fileName = 'file_' + req.params.page + '.js';                                
                                                                                         
        res.download(fileURL, fileName, function(err){                                   
            if (err) {                                                                   
                console.log('error.');                                                   
            } else {                                                                     
                console.log('download for ' + req.params.id + ' done.');                    
            }                                                                            
        })                                                                               
    }) 
    //後略
    });                                                                                  

/user/2/7にアクセスした際のコンソールに出るログは以下の通り。

$ node app.js 
Example app listening on port 3000!
Wed, 17 Feb 2016 13:56:03 GMT
Called.
:id value  =>  2
Called.
:page value  =>  7
req.path   /user/2/7
download for 7 done.

ダウンロードフォルダには、「file_7.js」