-
Node.js] 모듈 시스템 사용하기Node.js 2023. 12. 4. 15:04
다른 파일에서 사용할 수 있는 모듈을 직접 만들어 노드에 등록할 수 있다.
먼저 서버를 구동하는 파일을 깔끔하게 만들어보자.
//app.js const http = require("http"); const server = http.createServer((req,res) => {}); server.listen(3000);
이제 이 파일은 서버를 시동하기만 하고 아무 기능이 없다.
화살표 함수 내에 기존에 있던 내용들은
url 확인 등 라우팅 로직을 포함하는
routes.js 파일로 만들어보자.
//routes.js const fs = require("fs"); const requestHandler = (req, res) => { const url = req.url; const method = req.method; if (url === "/") { res.write("<html>"); res.write("<head><title>Enter Message</title></head>"); res.write( '<body><form action="/message" method="POST"><input type="text" name="message"><button type-"submit">Send</button></form></body>' ); res.write("</html>"); return res.end(); } if (url === "/message" && method === "POST") { const body = []; req.on("data", (chunk) => { console.log(chunk); body.push(chunk); }); return req.on("end", () => { const parsedBody = Buffer.concat(body).toString(); const message = parsedBody.split("=")[1]; //fs.writeFileSync("message.txt", message); //writeFileSync는 파일 작성이 완료될 때까지 코드실행을 막는다. 즉, 다음 행을 읽을 수 없다. fs.writeFile("message.txt", message, (err) => { res.statusCode = 302; res.setHeader("Location", "/"); return res.end(); }); }); } res.setHeader("Content-type", "text/html"); res.write("<html>"); res.write("<head><title>My First Page</title></head>"); res.write("<body><h1>Hello from my Node.js Server!</h1></body>"); res.write("</html>"); res.end(); }; module.exports = requestHandler;
이 코드의 상단부를 자세히 보자.
const fs = require("fs"); const requestHandler = (req, res) => { const url = req.url; const method = req.method;
파일 시스템을 활용하기 위해 fs 모듈을 가져왔고
requestHandler라는 상수에 기존 서버의 요청과 응답을 관리하는 화살표 함수를 만들었다.
하단부를 보면
module.exports = requestHandler;
module.exports를 통해 무엇을 노드 모듈로 등록할지를 정한다.
여기서는 앞에서 만든 requestHandler 함수를 저장했다.
다시 app.js로 돌아와서
const http = require("http"); const routes = require('./routes') const server = http.createServer(routes); server.listen(3000);
http 모듈을 불러올 때와 마찬가지로
require를 써서 app.js와 같은 폴더에 있는 routes.js를 불러온다.('.js'는 생략 가능)
server의 매개변수로 routes를 입력해주면 서버의 요청과 입력이 자동으로 routes로 전달된다.
module.exports는 다음과 같이 쓸 수도 있다.
//객체를 저장할 수도 있다. 이 때 app.js에서 routes.handler로 requestHandler함수에 접근한다 module.exports = { handler: requestHandler, someText: "Some hard coded text", }; //위 객체를 분해해서 다음과 같이 쓸 수도 있다. module.exports.handler = requestHandler; module.exports.someText = "Some hard coded text2"; //이 때 module.은 생략 가능하다. exports.handler = requestHandler; exports.someText = "Some hard coded text2";
'Node.js' 카테고리의 다른 글
npm으로 제 3자 패키지 사용하기 | 서버를 자동으로 재시작하는 nodemon 설치하기 (0) 2023.12.04 npm 패키지 설정하기 (1) 2023.12.04 Node.js | javascript] 이벤트 기반 코드 실행 | Event-Driven (0) 2023.12.04 Node.js] 라우터 요청 : url 루트의 요청에 따라 기능이 달라지는 간단한 서버 (0) 2023.12.01 Node.js] 서버의 요청 및 응답 확인하기 (1) 2023.11.30