ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 노드 fs로 HTML 읽어 제공하기
    노드 2023. 4. 13. 11:26

    전에 서버를 만들었을때 사용했던 코드를 가져와보면

    //server1.js
    const http = require('http');
    
    const server = http.createServer((req, res) => {
      res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
      res.write('<h1>Hello Node!</h1>');
      res.end('<p>Hello Server!</p>');
    })
      .listen(8080);
    server.on('listening', () => {
      console.log('8080번 포트에서 서버 대기 중입니다.');
    });
    server.on('error', (error) => {
      console.error(error);
    });

    간혹 브라우저가 응답부분을 HTML인지 문자열인지 구분을 못하는 경우가 있다.

    이때 사람이 직접 알려줘야 한다. 

    res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });

    이것을 그대로 쓰면 된다. 

     

    그런데 응답부분을 위와 같은 코드에 작성하면 응답을 많이 하고 싶은 경우, 또는 해야 되는 경우 코드 자체가 매우 더러워 질 수가 있다. 

    //server1.js
    const http = require('http');
    
    const server = http.createServer((req, res) => {
      res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
      res.write('<h1>Hello Node!</h1>');
      res.write('<h1>Hello Node!</h1>');
      res.write('<h1>Hello Node!</h1>');
      res.write('<h1>Hello Node!</h1>');
      res.write('<h1>Hello Node!</h1>');
      res.write('<h1>Hello Node!</h1>');
      res.write('<h1>Hello Node!</h1>');
      res.write('<h1>Hello Node!</h1>');
      res.write('<h1>Hello Node!</h1>');
      res.write('<h1>Hello Node!</h1>');
      res.write('<h1>Hello Node!</h1>');
      res.write('<h1>Hello Node!</h1>');
      
      res.end('<p>Hello Server!</p>');
      
    })
      .listen(8080);
    server.on('listening', () => {
      console.log('8080번 포트에서 서버 대기 중입니다.');
    });
    server.on('error', (error) => {
      console.error(error);
    });

    따라서 응답 부분은 별도의 html파일로 빼서 만들어 두고 그것을 읽어서 불러오는 방식을 사용하면 된다.

    //server.html
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title>Node.js 웹 서버</title>
    </head>
    <body>
        <h1>Node.js 웹 서버</h1>
        <p>만들 준비되셨나요?</p>
    </body>
    </html>
    //server1.js
    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 (error) {
        console.error(error);
        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', (error) => {
      console.error(error);
    });

    결과는 다음과 같다

    *res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });  그냥 문자열이라는 것을 알려주는 부분이다.

     

    '노드' 카테고리의 다른 글

    노드 POST, PUT, DELETE 요청 보내기  (0) 2023.04.13
    노드 REST API 서버 만들기  (1) 2023.04.13
    노드 http 서버 만들기  (0) 2023.04.13
    노드 에러 처리하기  (0) 2023.04.12
    노드 스레드풀과 커스텀 이벤트  (0) 2023.04.12
Designed by Tistory.