
require() : Node.js가 가지고 있는 모듈(기능을 할 줄 아는 부품)을 부르는 방법let http = require('http');
function onRequest(request, response) {
response.writeHead(200, {'Content-Type' : 'text/html'});
response.write('Hello Node.js');
response.end();
}
http.createServer(onRequest).listen(8888);
//localhost:8888
let http = require('http'); : Node.js의 내장 HTTP 모듈을 가져옴. 이 모듈은 HTTP 서버 및 클라이언트를 생성하는데 사용됨.function onRequest(request, response) {} : HTTP 요청이 발생할 때 호출되는 콜백 함수request : 클라이언트로부터 받은 HTTP 요청에 관한 정보를 포함함.response : 클라이언트에 보낼 HTTP 응답을 제어하는 객체.response.writeHead(200, {'Content-Type' : 'text/html'});response.write('Hello Node.js');response.end();http.createServer(onRequest).listen(8888);http.createServer()메서드를 사용하여 HTTP 서버를 생성함. 이 메소드는 요청이 있을 때마다 onRequest함수를 호출함listen(8888) 메소드는 서버를 특정 포트(여기서는 8888)에서 대기하도록 설정함. 

require('모듈 이름'); 이렇게 사용한 것처럼,//server.js
let http = require('http');
function start() {
function onRequest(request, response) {
response.writeHead(200, {'Content-Type' : 'text/html'});
response.write('Hello Node.js');
response.end();
}
http.createServer(onRequest).listen(8888);
//localhost:8888
}
exports.start = start;
//바깥에서 start 함수를 사용할 수 있게 할 것임.
//index.js
let server = require('./server');
server.start();

//server.js
let http = require('http');
let url = require('url');
function start() {
function onRequest(request, response) {
let pathname = url.parse(request.url).pathname;
console.log('pathname : '+ pathname);
response.writeHead(200, {'Content-Type' : 'text/html'});
response.write('Hello Node.js');
response.end();
}
http.createServer(onRequest).listen(8888);
//localhost:8888
}
exports.start = start;
//바깥에서 start 함수를 사용할 수 있게 할 것임.
//-->pathname은 http://localhost:8888 뒤에 오는 경로구나!!

//server.js
let http = require('http');
let url = require('url');
function start(route) {
function onRequest(request, response) {
let pathname = url.parse(request.url).pathname;
route(pathname);
response.writeHead(200, {'Content-Type' : 'text/html'});
response.write('Hello Node.js');
response.end();
}
http.createServer(onRequest).listen(8888);
//localhost:8888
}
exports.start = start;
//바깥에서 start 함수를 사용할 수 있게 할 것임.
//router.js
function route(pathname) {
console.log('pathname : '+ pathname);
}
exports.route = route;
//index.js
let server = require('./server');
let router = require('./router');
server.start(router.route);

//server.js
let http = require('http');
let url = require('url');
function start(route, handle) {
function onRequest(request, response) {
let pathname = url.parse(request.url).pathname;
route(pathname, handle);
response.writeHead(200, {'Content-Type' : 'text/html'});
response.write('Hello Node.js');
response.end();
}
http.createServer(onRequest).listen(8888);
//localhost:8888
}
exports.start = start;
//바깥에서 start 함수를 사용할 수 있게 할 것임.
//router.js
function route(pathname, handle) {
console.log('pathname : '+ pathname);
handle[pathname]();
}
exports.route = route;
//requestHandler.js
function main() {
console.log('main');
}
function login() {
console.log('login');
}
let handle = {}; // key:value (사전같은...)
handle['/'] = main;
handle['/login'] = login;
exports.handle = handle; //exports하면서 함수처럼 됨...
//index.js
let server = require('./server');
let router = require('./router');
let requestHandler = require('./requestHandler');
server.start(router.route, requestHandler.handle);

!!!favicon
- favorites icon의 약자로 웹 페이지나 웹 사이트를 대표하는 아이콘
- 웹 브라우저는 페이지를 요청할 때 자동으로 favicon을 요청하는데, 우리는 favicon이 존재하지 않기 때문에 이와 같은 에러가 발생하는 것임
- 해결하는 방법은 favicon.ico를 만들어서 제공해주는 방법이 있고, favicon 요청이 들어왔을 때 요청을 씹어버리는 방법이 있음.
if (pathname === '/favicon.ico') { response.writeHead(200, { 'Content-Type': 'image/x-icon' }); return response.end(); } //추가해서 오류 수정
requestHandlerrequestHandler는 라우터가 루트를 지정을 해주는, 그 루트에서 할 일을 정해주는 친구//server.js
let http = require('http');
let url = require('url');
function start(route, handle) {
function onRequest(request, response) {
let pathname = url.parse(request.url).pathname;
route(pathname, handle, response);
}
http.createServer(onRequest).listen(8888);
//localhost:8888
}
exports.start = start;
//바깥에서 start 함수를 사용할 수 있게 할 것임
//router.js
function route(pathname, handle, response) {
if (pathname === '/favicon.ico') {
response.writeHead(200, { 'Content-Type': 'image/x-icon' });
return response.end();
}
console.log('pathname : '+ pathname);
if (typeof handle[pathname] == 'function') {
handle[pathname](response);
} else {
response.writeHead(404, {'Content-Type' : 'text/html'});
response.write('Not Found.');
response.end();
}
}
exports.route = route;
//index.js
let server = require('./server');
let router = require('./router');
let requestHandler = require('./requestHandler');
server.start(router.route, requestHandler.handle);
//requestHandler.js
function main(response) {
console.log('main');
response.writeHead(200, {'Content-Type' : 'text/html'});
response.write('Main page');
response.end();
}
function login(response) {
console.log('login');
response.writeHead(200, {'Content-Type' : 'text/html'});
response.write('Login page');
response.end();
}
let handle = {}; // key:value (사전같은...)
handle['/'] = main;
handle['/login'] = login;
exports.handle = handle; //exports하면서 함수처럼 됨...