더북(TheBook)

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));
}

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

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