ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 06/03 node.js 서버
    게임 웹 프로그래밍/node.js 2021. 6. 3. 13:17

    1. http 모듈로 웹서버 만들기

    쿠키, 세션 처리, 라우팅

     

    createServer메서드

    요청이 들어올 때마다 매번 콜백함수가 실행

    req객체는 요청에 관한 정보

    res객체는 응답에 관한 정보

     

    포트

    외부에서 PC에 연결할 수 있는 통로

    서버 내에서 프로세스를 구분하는 번호

    유명한 포트번호는 21(ftp) 80(http) 443(https) 3306(mysql)

    포트만 다르게 해서 여러 서버를 실행할 수 있음

     

    server.listen

    서버에 포트를 열어줌

    클라이언트에게 공개할 포트 번호와 포트 연결 완료 후 실행될 콜백 함수를 넣어줌

     

    server1.js

    const http = require('http');
    const port = 3000;
    const server = http.createServer((req, res) => {
        res.write('<h1>Hello Node!</h1>');
        res.end('<p>Hello Server!</p>');
    });
    
    server.listen(3000, ()=> {
        console.log(`${port}번 포트에서 서버 대기중입니다.`);
    });

    서버 종료는 터미널에서 ctrl + c

     

     

    특정 이벤트 발생시 콜백 실행

    const http = require('http');
    
    const server = http.createServer((req, res) => {
        res.write('<h1>Hello Node!</h1>');
        res.end('<p>Hello Server!</p>');
    });
    
    server.listen(8080);
    server.on('listening', ()=>{
        console.log('8080번 포트에서 서버 대기중');
    });
    server.on('error', (error)=>{
        console.error(error);
    });

     

     

    http파일을 불러와서 표시

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Node.js 웹서버</title>
    </head>
    <body>
        <h1>Node.js 웹 서버</h1>
        <p>만들 준비되셨나요?</p>
    </body>
    </html>

    Visual studio code

    확장 -> live server

    Open with Live Server

    server2.js

    const http = require('http');
    const fs = require('fs');
    const port = 3001;
    const server = http.createServer((req, res) => {
        fs.readFile('./server2.html', (err, data) => {
            if(err) throw err;
            res.end(data);
        })
    });
    server.listen(port, ()=>{
        console.log(`${port}번 포트에서 서버 대기중...`)
    })

    2. 쿠키와 세션

    클라이언트에서 보내는 요청은 누가 요청을 보내는지 모름

    로그인을 구현하려면 쿠키와 세션을 알아야함

    로그인한 후 새로고침해도 로그아웃되지 않는 이유는 클라이언트가 서버에게 누구인지 지속적으로

    알려주고 있기 때문

    서버는 요청에 대한 응답에 쿠키(키-값의 쌍)를 같이 보냄

    브라우저는 쿠키가 있다면 자동으로 동봉해서 보내서 따로 처리할 필요가 없음

     

    쿠키는 요청과 응답의 헤더에 저장

    요청과 응답은 각각 헤더와 본문을 가짐

     

    const http = require('http');
    
    let server = http.createServer((req, res)=> {
        res.writeHead(200, {'Set-Cookie' : 'mycookie=test'});
        res.end('Hello Cookie');
    });
    
    server.listen(3000, ()=> {
        console.log(3000 + '포트에서 서버 대기중...');
    });

    const http = require('http');
    
    
    let server = http.createServer((req, res)=> {
        console.log(req.headers.cookie);
        //res.writeHead(200, {'Set-Cookie' : 'mycookie=test'});
        res.end('Hello Cookie');
    });
    
    server.listen(3000, ()=> {
        console.log(3000 + '포트에서 서버 대기중...');
    });

     

     

     

    querystring을 사용하여 query를 파싱

    const http = require('http');
    const fs = require('fs');
    const url = require('url');
    const qs = require('querystring');
    
    //서버 생성
    const server = http.createServer((req, res) => {
        let message = '';
        
        if(req.url.startsWith('/')) {
            message = 'home';
            if(req.url.startsWith('/login')) {
                message = 'login';
                console.log('url : ' + req.url);
                const { query } =  url.parse(req.url);
                console.log('query : ' + query);
                const {name, age } = qs.parse(query);
                console.log('name: ' + name + ', age: ' + age);
            }
        }
        
        res.end(message);
    });
    
    //서버를 시작한다.
    server.listen(3000, () => {
        console.log('서버가 시작 되었습니다.')
    })

     

     

    res.end에 한글쓰면 깨짐

    res.writeHead에 Content-Type을 text/html; charset=UTF-8로 설정

     

    주소별 분기처리

     

    http://localhost:3000
    http://localhost:3000/login

    '게임 웹 프로그래밍 > node.js' 카테고리의 다른 글

    06/09 node.js  (0) 2021.06.09
    06/08 node.js  (0) 2021.06.08
    06/04 node.js  (0) 2021.06.04
    06/02 node.js  (0) 2021.06.02
    06/01 node.js  (0) 2021.06.01
Designed by Tistory.