[NodeJS] 페이지 라우팅 및 리디렉션

솔방울·2022년 9월 12일
0
post-thumbnail

페이지 라우팅

당연히 Node.js도 쟝고와 완벽히 똑같은 기능을 수행하는 만큼, 들어오는 페이지에 따라 라우팅 기능도 구현할 수 있다.

전 포스트를 봤다면 알다시피, createServer의 요청값 중에 어떤 url로 요청을 보냈는지 확인할 수 있는 req.url이 있었다. 이를 통해 특정 url일 때 다른 html 페이지를 렌더링해줄 수 있도록 조치할 수 있다.

const http = require('http');

const server = http.createServer((req,res) => {
	const url = req.url;
    
    if (url === "/") {
    	res.write('<html>')
    	res.write('<head><title>First Page</title></head>')
    	res.write('<body><form action="/message" method="POST"><input type="text" name="message"><button type="sumbit"></button></form></body>')
    	res.write('</html>')
        return res.end(); // return 하지 않을 경우 아래 구문도 함께 실행되므로 return 문 실행
    }
    res.write('<html>')
    res.write('<head><title>First Page</title></head>')
    res.write('<body><h1>Hello world!</h1></body>')
    res.write('</html>')
    res.end();
})

server.listen(3000);

아무것도 요청하지 않았을 때 url은 "/"으로 정의되므로, 위의 form 태그와 관련된 HTML 코드가 실행된다. form 태그에 있는 action은 button 에 있는 type=submit 버튼이 눌렸을 때, 안에 있는 데이터들이 어디로 이동될지에 대한 최종 url 주소를 의미한다. 하지만 우리는 /message에 대한 url에 대해 정의가 되어있지 않으므로 기본적인 html 코드를 ("Hello world!")를 보여주게 된다.

그 안에 있는 input에는 name="message"라고 되어있는데, 나중에 이 데이터를 받는 서버측에서 name에 정의된 이름으로 데이터를 받게 되므로 아이디나 패스워드 같은 경우 정의를 해주는 것이 편리할 것이다.

페이지 리디렉션

const http = require('http');
const fs = require('fs'); //로컬 파일 시스템과 관련된 모듈

const server = http.createServer((req,res) => {
	const url = req.url;
    const method = req.method;
    if (url === "/") {
    	res.write('<html>')
    	res.write('<head><title>First Page</title></head>')
    	res.write('<body><form action="/message" method="POST"><input type="text" name="message"><button type="sumbit"></button></form></body>')
    	res.write('</html>')
        return res.end(); 
    }
    
    if (url === "/message" && method === "POST") {
    	fs.writeFileSync('message.txt','Dummy'); 
        res.statusCode = 302;
        res.setHeader('Location','/'); // url "/"로 리디렉션
        return res.end();
    }
    res.write('<html>')
    res.write('<head><title>First Page</title></head>')
    res.write('<body><h1>Hello world!</h1></body>')
    res.write('</html>')
    res.end();
})

server.listen(3000);

writeFile => 비동기적으로 수행
writeFileSync => 동기적으로 수행

두 함수 모두 첫 인자로는 총 3개의 인자를 받는데, file경로, 입력할 데이터, 옵션(인코딩 방법, mode, flag) 등을 정의받는다.

마지막 두 번째 인자는 콜백함수인데, 에러에 대한 메시지를 출력하거나 성공했을 때 사용할 수 있다.

fs.writeFileSync('message.txt','Dummy',(err) => {
	if(err) {
    	alert(err);
    } else {
    	console.log("file written successfully")
    }
}); 
profile
당신이 본 큰 소나무도 원래 작은 솔방울에 불과했다.

0개의 댓글