[Node.js] #5 HTTP

✨New Wisdom✨·2020년 7월 26일
0

📗 Nodejs 📗

목록 보기
6/20
post-custom-banner

이 노트는 “Node.js 교과서”를 공부하면서 기록되었다.

Node.js 에서 HTTP 모듈

http 모듈은 노드에서 가장 기본적인 웹 모듈이며 http 웹 서버뿐만 아니라 클라이언트를 생성하는 것과 관련된 모든 기능을 담당하는 모듈이다. 네트워크 기능을 담당하는, 서버를 위한 필수 모듈!

HTTP 기본 모듈

  • http.createServer() : 서버 생성. 서버 인스턴스를 만들어 반환한다.
  • http.server() : 서버 클래스를 뜻한다.
  • server.listen() : 만들어진 서버 객체 server를 클라이언트 요청 대기 상태로 만든다. (listen)

예제

// http가 server1.js를 서버 프로그램으로 만들어준다.
// 노드는 서버가 아니라 런타임이다!
const http = require('http')

// 서버 만들기
const server = http.createServer((req,res)=>{
    // req : 요청, res : 응답
    console.log('서버 실행');
    res.write('<h1>Hello Node</h1>') // res.write 는 여러번 쓸 수 있다.
    res.write('<h2>Hello Node</h2>')
    res.end('<p>Hello Server!</p>') // 응답이 끝남을 알려줌
})

// 서버를 요청 대기 상태로 만든다.
server.listen(8080,()=>{ 
    console.log('8080번 포트에서 서버 대기중입니다.')
});

server.on('error',(error)=>{
    console.error(error);
});

전에 정리했듯이 노드는 서버 프로그램이 아닌 런타임이다! http 모듈이 노드를 통해 server.js 가 서버의 역할을 할 수 있도록 만들어주는 것이다.

여기서 createserver에서 callback 함수에 인자값으로 req와 res를 넣어주는데, req와 res는 무엇인가?

Request, Response

Http 요청이 서버에 오면 node가 트랜잭션을 다루기 위해 request와 response 객체를 전달항여 요청 핸들러 함수를 호출한다.

Request 객체에는 요청이 왔을 때 정보들을 처리할 내용들을 담아주고,
Response 객체에는 그 요청에 대한 응답의 내용들을 담아준다.

여기서 Response 객체에는 write 메소드로 응답 내용을 적어주었다. write메소드로 응답 내용들을 여러번 적어줄 수도 있다.
end 메소드로 응답의 끝을 알린다.

이렇게 일일이 res객체에 응답 내용을 적어줄 수도 있지만 기나긴 내용을 한줄한줄 응답객체에 일일이 써주는건 쩜 무리다..

그렇기 때문에 응답할 html 파일을 fs 모듈로 읽어서 res객체를 통해 전송할 수도 있다.

// http가 server1.js를 서버 프로그램으로 만들어준다.
// 노드는 서버가 아니라 런타임이다!
const http = require('http');
const fs=require('fs');

// 서버 만들기
const server = http.createServer((req,res)=>{
    // server2.html 파일 읽기
    fs.readFile('./server2.html',(err,data)=>{
        if(err){
            throw err;
        }
        // res 객체에 html 파일 담음
        res.end(data);
    })
}).listen(8080,()=>{ // 서버를 요청 대기 상태로 만든다.
    console.log('8080번 포트에서 서버 대기중입니다.')
});

server.on('error',(error)=>{
    console.error(error);
});

🚚원글 (Jul 15 · 2 min) 글 이사🚚
origin : https://medium.com/developer-new-wisdom/node-js-5-http-ecabfe94df21

profile
🚛 블로그 이사합니다 https://newwisdom.tistory.com/
post-custom-banner

0개의 댓글