なっく日報

技術やら生活やらのメモ

Expressで特定のパスだけ静的ファイルを配信する方法

本日APIを眺めていて、たまたま気づいたのでメモ。

何も考えずにやるなら、fs.readFileで読み込んでres.sendなんですが、最初からAPIがありました。

それはこちらのres.sendFile

http://expressjs.com/en/4x/api.html#res.sendFile

使い方(APIまんま)

app.get('/file/:name', function (req, res, next) {

  var options = {
    root: __dirname + '/public/',
    dotfiles: 'deny',
    headers: {
        'x-timestamp': Date.now(),
        'x-sent': true
    }
  };

  var fileName = req.params.name;
  res.sendFile(fileName, options, function (err) {
    if (err) {
      console.log(err);
      res.status(err.status).end();
    }
    else {
      console.log('Sent:', fileName);
    }
  });

});

ちなみに、v4.8.0より前はres.sendfileとCamelでないメソッド名なのでご注意ください。