본문 바로가기
웹/(Node.js)노드

(Node.js) 파일 읽기 + 예제/ readFile과 readFileSync

by 공부가싫다가도좋아 2021. 9. 9.
반응형

Node.js 파일 읽기 + 예제


 

포스팅 요약

1. readFile vs readFileSync

2. readFile 사용법

3. readFileSync 사용법

4. 예제

5. 그 외 추가 자료 링크


1. readFile vs readFileSync

> readFile은 비동기, readFileSync는 동기

> 사용 형식

fs.readFile("파일경로", "encoding", callback)

fs.readFileSync("파일경로", "encoding")

 

> fs.readFile 동작 과정

파일명: server2.js

const http = require("http");
const fs = require("fs");
const app = http.createServer((request, response) => {
  const _url = request.url;
  const fullUrl = new URL("http://localhost:3000" + _url);
  const pathName = fullUrl.pathname;

  if (pathName === "/") {
    fs.readFile("./data/html", (err, data) => {
      console.log("1.비동기입니다~")
      response.writeHead(200, { "Content-Type": "text/html;charset = utf-8" });
      response.end(data);
    });
  }
  console.log("2.비동기입니다~")
});

app.listen(3000, () => {
  //포트번호 3000으로 서버 구동
  console.log("서버 시작 주소: http:localhost:3000");
});

 

<결과>

* 밖깥에 있는 콘솔이 실행 된 후, readFile안에 있는 콘솔이 동작함.

 

> fs.readFileSync 동작 과정

파일명:server2.js

const http = require("http");
const fs = require("fs");
const app = http.createServer((request, response) => {
  const _url = request.url;
  const fullUrl = new URL("http://localhost:3000" + _url);
  const pathName = fullUrl.pathname;

  if (pathName === "/") {
    const html = fs.readFileSync("./data/html", "utf8");
    console.log("1.동기입니다~");
  }
  console.log("2.동기입니다~");
});

app.listen(3000, () => {
  //포트번호 3000으로 서버 구동
  console.log("서버 시작 주소: http:localhost:3000");
});

* 차례대로 동작함

 

<결과>


2. readFile 사용법

 

경로 data/html.txt

 

파일명: html.txt

 

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <h1>html</h1>
</body>
</html>

 

파일명: server2

const http = require("http");
const fs = require("fs");
const app = http.createServer((request, response) => {
  const _url = request.url;
  const fullUrl = new URL("http://localhost:3000" + _url);
  const pathName = fullUrl.pathname;

  if (pathName === "/") {
  
  //data파일의 html.txt파일을 읽어옴
    fs.readFile("./data/html", "utf8", (err, data) => {
      response.writeHead(200);
      response.end(data);
    });
  }
});

app.listen(3000, () => {
  //포트번호 3000으로 서버 구동
  console.log("서버 시작 주소: http:localhost:3000");
});

 

<결과>

터미널창

 

웹 화면

 


3. readFileSync 사용법

 

 

경로 data/css.txt

 

 

파일명: html.txt

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <h1>css</h1>
</body>
</html>

 

파일명: server2

 

const http = require("http");
const fs = require("fs");
const app = http.createServer((request, response) => {
  const _url = request.url;
  const fullUrl = new URL("http://localhost:3000" + _url);
  const pathName = fullUrl.pathname;

  if (pathName === "/") {
    const css = fs.readFileSync("./data/css", "utf8");
    response.writeHead(200);
    response.end(css);
  }
});

app.listen(3000, () => {
  //포트번호 3000으로 서버 구동
  console.log("서버 시작 주소: http:localhost:3000");
});

4. 예제

<결과 화면>

 

Main을 클릭시, 코드짜는 문과녀 화면에 출력

NodeJs를 클릭시, NodeJs 관련 글 출력, css, html도 동일.

<코드>

파일명: server2.js

const http = require("http");
const fs = require("fs");
const info = require("./info.js");
const app = http.createServer((request, response) => {
  const _url = request.url;
  const fullUrl = new URL("http://localhost:3000" + _url);
  const pathName = fullUrl.pathname;
  const queryData = fullUrl.searchParams;

  if (pathName === "/") {
    let list = "";
    if (queryData.get("id") === null) { // localhost:3000/ 일때
      title = `<h1>코드짜는 문과녀</h1>`;
      description = `<p>코드짜는 문과녀의 블로그입니다.</p>`;
    } else { // localhost:3000/?id=파일명 <-id뒤에 값이 있을때
      /* localhost:3000/?id=NodeJs 일때,
        queryData.get("id") = NodeJs
      */
      title = queryData.get("id");
      description = fs.readFileSync(`./data/${title}`, "utf8"); 
    }

    fs.readdir("./data", (err, files) => {
      files.forEach((file) => {
        list += `<li><a href="/?id=${file}">${file}</a></li>`;
      });
      response.writeHead(200, { "Content-Type": "text/html;charset = utf-8" });
      response.end(info(title, description, list));
    });
  }
});

app.listen(3000, () => {
  //포트번호 3000으로 서버 구동
  console.log("서버 시작 주소: http:localhost:3000");
});

 

파일명: info.js

const info = function (title, description, list) { 
//server.js에서 매개 변수 title, description, list를 받아옴.

  return `<!DOCTYPE html>
  <html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
  </head>
  <body>
    <h1><a href="/">Main</a></h1>
    <h2>${title}</h2>
    ${description}
    <hr>
    <ul>
      ${list}
    </ul>
  </body>
  </html>`;
};

module.exports = info;

 

data폴더와 data폴더 안에 css, html, NodeJs.txt 파일 만들기

파일 내용 아래 사진 참조해주세요.


5. 그 외 추가 자료 링크

node.js에서 파일 목록 불러오는 법이 궁금하다면 아래 링크를 참고해주세요~

2021.09.08 - [웹/(Node.js)노드] - (Node.js) 파일 목록 불러오기/ 파일 이름 불러오기 + 예제(간단함)

 

반응형

댓글