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