I/O를 담당하는 코드를 모두 완성했습니다. 전체 코드는 다음과 같습니다.

    코드 5-5 monolithic.js 전체 코드

    예제 파일 : monolithic.js

    const http = require('http');
    const url = require('url');
    const querystring = require('querystring');
    
    const members = require('./monolithic_members.js');
    const goods = require('./monolithic_goods.js');
    const purchases = require('./monolithic_purchases.js');
    
    /**
     * HTTP 서버를 만들고 요청 처리
     */
    var server = http.createServer((req, res) => {
        var method = req.method;
        var uri = url.parse(req.url, true);
        var pathname = uri.pathname;
    
        if (method === "POST" || method === "PUT") {
            var body = "";
    
            req.on('data', function(data) {
                body += data;
            });
            req.on('end', function() {
                var params;
                if (req.headers['content-type'] == "application/json") {
                    params = JSON.parse(body);
                } else {
                    params = querystring.parse(body);
                }
    
                onRequest(res, method, pathname, params);
            });
        } else {
            onRequest(res, method, pathname, uri.query);
        }
    }).listen(8000);
    
    /**
    * 요청에 대해 회원 관리, 상품 관리, 구매 관리 모듈별로 분기
    * @param res       response 객체
    * @param method    메서드
    * @param pathname  URI
    * @param params    입력 파라미터
    */
    function onRequest(res, method, pathname, params) {
    
        switch (pathname) {
            case "/members":
                members.onRequest(res, method, pathname, params, response);
                break;
            case "/goods":
                goods.onRequest(res, method, pathname, params, response);
                break;
            case "/purchases":
                purchases.onRequest(res, method, pathname, params, response);
                break;
            default:
                res.writeHead(404);
                return res.end();
        }
    }
    
    /**
    * HTTP 헤더에 JSON 형식으로 응답
    * @param res       response 객체
    * @param packet    결과 파라미터
    */
    function response(res, packet) {
        res.writeHead(200, { 'Content-Type': 'application/json' });
        res.end(JSON.stringify(packet));
    }

    다른 부분들도 완성해야 하므로 아직은 실행하지 않습니다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.