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);
は書いてるよー
それ前提の話ね。
半日、ベンチマークしてた。