Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

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」