LeeWang_31
이왕31
LeeWang_31
전체 방문자
오늘
어제
  • 분류 전체보기 (234)
    • 프로젝트 (2)
      • 사이드 프로젝트 (2)
      • Codestates_pre_project (0)
    • 프론트엔드 (169)
      • Html (19)
      • CSS (18)
      • JavaScript (29)
      • Codestates (76)
      • 코딩노트 (27)
    • 백엔드 (10)
      • node (10)
    • 구르는 돌 🌑 (16)
      • Codestates (11)
      • 생각 (4)
      • 공부 흔적 (1)
    • 정보 (18)
      • 오류노트 (2)
      • 인텔리제이 정보 (9)
      • 깃 정보 (3)
      • 기타 정보 (4)
      • 안드로이드스튜디오 정보 (0)
    • CS (7)
      • 이론공부 (7)
    • App (6)
      • Android (3)
      • Kotlin (3)
    • 컴퓨터 수학 (5)
      • 암호론 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • JavaScript
  • 백준
  • 코플릿
  • 사용자 친화 웹
  • TODOlist
  • 안드로이드스튜디오범블비
  • linuix 코드스테이츠
  • css
  • html
  • 2693
  • linux
  • 안드로이드스튜디오파이어베이스
  • 사용자친화웹
  • codestate
  • figjam
  • DP
  • 코딩애플
  • UI/UX
  • 웹팩
  • 자바스크립트
  • 파이어베이스연동
  • 2609
  • React
  • 코드스테이츠
  • 1292
  • 번들링
  • ubuntu
  • 생활코딩
  • 사이드프로젝트
  • 알고리즘

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
LeeWang_31

이왕31

[Node] fs로 HTML 읽기
백엔드/node

[Node] fs로 HTML 읽기

2022. 11. 27. 18:56

fs로 HTML 읽기

HTML생성

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>node 서버 만들기</title>
</head>
<body>
<h1>헬로 워드</h1>
<p>방가방가</p>
</body>
</html>

server2.html이라는 파일을 생성했습니다.

fs비동기로 받기

비동기로 받는 이유는 정확하게 이해 하지못했다. 검색해봤는데 시원한 답을 못찾았다.

개인적인 생각으로는 http.createServer와 같은 동작이 비동기로 실행 되기 때문에 fs도 비동기로 받는게 이치에 맞지 않나 하는 생각이 있다.

const http = require('http')
const server = http.createServer((req, res) => {

}).listen(8080)
server.on('listening',()=>{
    console.log('8080번 포트에서 서버 대기중입니다.')
})
server.on('error',(err)=>{
    console.log(err)
})

다음과 같은  코드를 갖는 server2.js 파일을 만들었다.

 

우선 fs를 비동기로 받아봅니다

const fs = require('fs').promises

 

writeHead

writeHead는 헤더데이터를 전송할 수 있다.

response.writeHead(statusCode[, statusMessage][, headers])

다음과 같은 구성을 갖는데, 이제 정상적인 응답을 보내는 경우 statusCode에 200, 아닌 경우 404를 보낼수 있다.

 

headers에 Content-Type을 보낼수 있다.

'Content-Type': 'text/html'

위처럼 작성하면 html형식을 보낸다고 미리 알려줄수 있고, 

'Content-Type': 'text/plain;

위처럼 작성하면 text형식을 보낸다고 알려줄수 있다.

 

'Content-Type': 'text/html; charset=utf-8'다음과 같이 charset을 주어 한글도 정상적으로 작동될 수 있게 만들수 있습니다.

 

fs.readFile

readFile을 사용하여 html파일을 가져왔다.

비동기로 실행을 하기 때문에 await을 사용하고 createServer을 async를 사용했다

또한 비동기 실행은 error catch가 필요하기 때문에 try catch문으로 작성했다.

 

res.end에 readFile의 변수를 담았다 

const http = require('http')
const fs = require('fs').promises

const server = http.createServer(async (req, res) => {
    try {
        res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'})
        const data = await fs.readFile('./server2.html')
        res.end(data)
    } catch (err) {
        console.error(err)
        res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'})
        res.end(err.message)

    }
}).listen(8080)
server.on('listening', () => {
    console.log('8080번 포트에서 서버 대기중입니다.')
})
server.on('error', (err) => {
    console.log(err)
})

node server2.js로 실행하면 만들었던 html이 정상적으로 보입니다.


참고

  • https://www.inflearn.com/course/%EB%85%B8%EB%93%9C-%EA%B5%90%EA%B3%BC%EC%84%9C/dashboard
  • https://nodejs.org/ko/docs/guides/anatomy-of-an-http-transaction/
  • https://www.w3schools.com/nodejs/met_server_listen.asp#gsc.tab=0

 

저작자표시 (새창열림)

'백엔드 > node' 카테고리의 다른 글

[Node.js/MongoDB] Html파일 전송하기  (0) 2022.12.14
[Node.js/MongoDB] nodemon  (0) 2022.12.14
[Node.js/MongoDB] Express와 get으로 읽기  (0) 2022.12.14
[Node.js/MongoDB] Node.j란  (1) 2022.12.14
[Node] HTTP서버 만들기  (0) 2022.11.27
    '백엔드/node' 카테고리의 다른 글
    • [Node.js/MongoDB] nodemon
    • [Node.js/MongoDB] Express와 get으로 읽기
    • [Node.js/MongoDB] Node.j란
    • [Node] HTTP서버 만들기
    LeeWang_31
    LeeWang_31
    이왕 할 거면 기분 좋게

    티스토리툴바