HEYBlog about Technology

京都の学生エンジニアのエンジニアブログ

node.jsでContent-Type指定する際のメモ

ただ、リクエストに対して、ただ、画像を返すやつ書いてたのに、一瞬詰まった。

var express = require('express');
var router = express.Router();
var fs = require('fs');

/* GET images listing. */
router.get('/', function(req, res) {

  image_path = req.originalUrl.slice(1);
  var buf = fs.readFileSync(image_path);
  res.send(buf, { 'Content-Type': 'image/png' }, 200);

});

module.exports = router;

localhost:3000/123456abcabc3333123456abcabc3333.png

で画像返ってくると思ったら、なんか画像返らんと、ダウンロードされて「は?」ってなった。

WebConsole見てもContent-Typeが'image/png'にならなくて詰んでた。

これが正解

var express = require('express');
var router = express.Router();
var fs = require('fs');

/* GET images listing. */
router.get('/', function(req, res) {

  image_path = req.originalUrl.slice(1);
  var buf = fs.readFileSync(image_path);
  res.writeHead(200, {'Content-Type': 'image/png' });
  res.end(buf);
});

module.exports = router;

非同期的に書くと

var express = require('express');
var router = express.Router();
var fs = require('fs');

/* GET images listing. */
router.get('/', function(req, res) {

  image_path = req.originalUrl.slice(1);
  fs.readFile(image_path,
      function(err,file){
      res.writeHead(200, {'Content-Type': 'image/png' });
      res.end(file);
    }
  );
});

module.exports = router;

もちろんapp.jsに

var images = require('./routes/images');
app.use('/([0-9a-f]{32}).png',images);

は書いてるよー

それ前提の話ね。

半日、ベンチマークしてた。