개발/node.js

node.js 에서 http로 response에 파일 담기

신매력 2012. 12. 1. 17:35
node.js에서는 resource 들을 public 폴더에서 관리한다.

public/img.jpg 가 있다고 해보자.

express 프레임워크를 쓰면
http://localhost:3000/img.jpg 라고 하면 express에서 이미지를 response에 담아주는 작업을 해주므로, 그림이 잘 뜰 것이다.

그런데 프레임워크를 안쓰고 있다면, 직접 response에 담는 작업을 해줘야한다.(pumping)


파일들을 펌핑하는 법은 아래와 같다.

(확장자 별로 분기하여 처리.. 이미지만 예를 들겠다)


이미지 뿐만아니라 동영상 등 여러 파일도 아래와 같이 쓰면 된다.


  var fs = require('fs'),

http = require('http'),

util = require('util'),

sys = require('sys');


var foo = function(req, response) {

var url = req.url;   //   /img.jpg

var ext = url.substring(url.lastIndexOf(".")+1);  // jpg


       if (ext == "gif" || ext == "jpg") {

fs.stat("public"+url, function(error, stat){

if (error) {

throw error;

}

var rs;

response.writeHead(200, {

'Content-Type' : 'image/' + ext,

'Content-Length' : stat.size,

});


rs = fs.createReadStream("public" + url); // public/img.jpg을 읽는다


 util.pump(rs, response, function(err) {

if(err) {

console.log("util.pump error");

throw err;

}

}); 

});

}

}

var httpServer = http.createServer(foo).listen(3000);



util 대신 sys.pump 를 해도 똑같이 동작한다.

sys는 구버전이고 util이 최신거이므로 util로 써야한다.

둘은 비슷한 인터페이스를 쓰고 있다고한다.