728x90
오늘은 http 모듈을 활용해 간단한 웹 서버를 만들어보겠습니다.
http모듈은 http 웹 서버 구축 및 클라이언트 기능을 제공하는 모듈입니다.
1.프로젝트 생성 및 초기화
mkdir 생성할 폴더명
cd 방금 생성한 폴더명
npm init -y
=> 원하는 경로에 폴더를 생성하고 해당 폴더로 이동 후 프로젝트 생성 및 초기화 시켜줍니다.
2.http모듈 활용할 js파일, html파일 담아둘 폴더, html파일 생성
mkdir html 파일 담아둘 폴더명
touch html 파일명
touch js 파일명
=> 프로젝트 폴더 내에서 js 파일을 생성합니다.
=> html 파일 담아둘 폴더 내에 html 파일을 생성합니다.
저는 위 이미지와 같이 생성하였습니다.
3.http 모듈 활용할 js파일 코드 작성
// http 모듈 import
const http = require('node:http');
// fs 모듈 import
const fs = require('node:fs');
//path 모듈 import
const path = require('node:path');
// 사용할 포트 값 설정
const PORT = 3000;
// 서버 생성
const server = http.createServer((req, res) => {
console.log(`${req.method} ${req.url}`); // 요청 메서드와 URL 로그 출력
// 라우팅 처리
if (req.url === '/' && req.method === 'GET') {
// get 요청으로 루트 경로로 요청시 응답 처리
//html 파일 경로 문자열 생성
const filePath = path.join(__dirname, 'html 파일 담아 둔 폴더명(경로적기x)', '만들어둔 html파일명(경로적기x)');
//html 파일 정보 읽기
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
console.error('파일 읽기 에러:', err);
res.writeHead(500, { 'Content-Type': 'text/plain' });
res.end('서버 에러');
return;
}
// 성공적으로 html 파일을 읽었을 때
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end(data);
});
} else {
// 다른 모든 요청에 대한 404 응답
res.writeHead(404, { 'Content-Type': 'text/plain' });
res.end('404 Not Found');
}
});
// 서버 시작
server.listen(PORT, () => {
console.log(`${PORT} 포트로 서버가 실행 중입니다.`);
});
4.html파일 코드 작성
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>예시</title>
</head>
<body>
<h1>예시로 만든 페이지입니다</h1>
<p>http 모듈로 만든 서버에서 응답해주었습니다</p>
</body>
</html>
5.서버 실행
node http모듈활용한js파일명
실행 결과
요청에 성공적으로 응답하여 http 모듈로 만든 서버가 정상적으로 동작하고 있는 것을 확인할 수 있습니다.
'Nodejs' 카테고리의 다른 글
[Nodejs]http 모듈 활용해 post 요청 보내고 응답 받기 (4) | 2024.12.29 |
---|---|
[Nodejs]http 모듈 활용해 get 요청 보내고 응답 받기 (0) | 2024.12.23 |
[Nodejs]비동기, 콜백 방식으로 파일 생성 및 쓰기 예시 만들기 (0) | 2024.12.11 |
[Nodejs] async await를 사용해 파일 생성 및 쓰기 예시 만들기 (2) | 2024.12.05 |
[Nodejs]동기 방식으로 파일 생성 및 쓰기 예시 만들기 (0) | 2024.11.29 |