노드

노드 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' });  그냥 문자열이라는 것을 알려주는 부분이다.