Server setHeader / writeHead , readFile / createReadStream

KHW·2021년 7월 14일
0

Node.js

목록 보기
9/19

기본설치

npm i http-server 명령어 사용해서 설치

간단한 서버 만들기

const http = require('http');

const server = http.createServer((req,res)=>{
  res.write('welcome!');
  res.end();			// 응답을 종료해주는 역할
})

server.listen(8080);

HTML 전송하기

const http = require('http');

const server = http.createServer((req,res)=>{
  res.setHeader('content-type', 'text/html');
  res.write('<html><body><h1>hi</h1></body></html>')
  res.end();
})

server.listen(8080);

html 형태의가 type이 text/html로 나온다.


content-type 변경

const http = require('http');

const server = http.createServer((req,res)=>{
  res.setHeader('content-type', 'application/json');
  res.write('<html><body><h1>hi</h1></body></html>')
  res.end();
})

server.listen(8080);

브라우저 출력에 단지 hi만 뜨는 것이 아닌
<html><body><h1>hi</h1></body></html> 형태의 text가 출력된다.


setHeader / writeHead

  • request.setHeader(name, value)

ex)

request.setHeader('Content-Type', 'application/json');

request.setHeader('Cookie', ['type=ninja', 'language=javascript']);

  • response.writeHead(statusCode[, statusMessage][, headers])

ex)

const body = 'hello world';
response
  .writeHead(200, {
    'Content-Length': Buffer.byteLength(body),
    'Content-Type': 'text/plain'
  })
  .end(body);

응답 요소와 그에따르는 반환요소를 준다.


setHeader 예시

const http = require('http');

const server = http.createServer((req,res)=>{
  res.setHeader('content-type', 'application/json');
  res.write('<html><body><h1>hi</h1></body></html>')
  res.end();
})

server.listen(8080);

writeHead 예시

const http = require('http');

const server = http.createServer((req,res)=>{
  res.writeHead(200,{'content-type' : 'application/json'});
  res.write('<html><body><h1>hi</h1></body></html>')
  res.end();
})

server.listen(8080);

둘다 실질적으로 결과는 같다.


파일에 있는 것을 브라우저로 보이고 싶을때

const fs = require('fs') 파일과 관련한 fs필요

const fs = require('fs');
const http = require('http');
const server = http.createServer((req,res)=>{
  
  const url = req.url;
  
  res.setHeader('Content-Type','text/html');
  
  if(url == '/'){
    fs.createReadStream('./index.html').pipe(res);
  }
  else if(url == '/myHTML'){
    fs.createReadStream('./myhtml.html').pipe(res);
  }
  else{
    fs.createReadStream('./notFound.html').pipe(res);
  }

});

server.listen(8080);

readFile vs createReadStream

fs.readFile

전체 파일을 전부 읽어서 클라이언트로 전송한다

  • 파일 크기가 작으면 무시할 수 있지만 디스크 속도가 느리고 파일 내용이 큰 경우에는 큰 차이가 있다

  • readFile
fs.readFile('./index.html',(err,data)=>{
      if(err) throw err;
      res.end(data);
    });

처리 할 대상인 data가 비동기로 처리


  • readFileSync
let data = fs.readFileSync('./index.html');
    res.end(data);

처리 할 대상인 data가 동기적으로 받아 처리


  • readFile promises
fs.promises.readFile('./index.html').then(data=>res.end(data));

fs.createReadStream

전체 파일을 메모리에 로드하는 동안 fs.createReadStream은 전체 파일을 지정한 크기의 chunk로 읽는다.
fs.createReadStream을 이용하면 클라이언트가 데이터를 더 빠르게 받을 수 있다.

  • 클라이언트가 데이터를 읽는 동안 chunk로 보내지기 때문에
    즉, 큰 용량을 한번에 올려서 옮기는 것보다 빠르게 가능
fs.readFile('./index.html').pipe(res);

출처

readFile vs createReadStream

profile
나의 하루를 가능한 기억하고 즐기고 후회하지말자

0개의 댓글