노드 서버에서 요청 메서드 처리하는 방법을 알아보겠습니다
이번 스프린트 에서는 upper와 lower server를 구현해보았고 그 구현 과정을 설명 해보겠습니다
let http = require('http')
const PORT = 3000;
const IP = 'localhost'
const server = http.createServer((request, response) => {
if(request.method === 'POST'){
}
if(request.method === 'OPTION'){
}
})
이런식으로 메소드의 구간을 나누어서 요청되는 메소드가 어떤 메소드인지에 따라 알맞은 값을 줄 수 있습니다
그 다음으로 POST 메소드로 요청이 들어온 경우에는 우리가 구현하고자 했던 /upper 와 /lower로 라우터를 정의 해줄 수 있습니다
러우터란 ?
URI(경로) 및 특정한 HTTP(Hyper Text Transfet Protocol) 요청 메소드(GET,POST)의 클라이언트 요청에 응답하는 방법을 결정하고 각 라우트는 하나 이상의 핸들러 함수를 가질 수 있고, 라우트가 일치할 때 실행됩니다.
//GET 방식의 METHOD
app.get('/', function (req, res) {
res.send("hello getMethod")
})
//POST 방식의 MEHTOD
app.post('/', function (req, res) {
res.send("Hello postMethod")
})
라우터의 사용 예시
const server = http.createServer((request, response) => {
if(request.method === "POST"){
if(request.url === '/lower'){
}else
if(request.url === '/upper'){
}
}
if(request.method === "OPTION"){
}
});
이렇게 라우터로 POST 요청으로 lower 요청이 왔을때와 upper 요청이 들어왔을때를 만들어 줄 수 있습니다
if POST요청이 들어왔을때 => 그안에서의 lower 나 upper가 들어왔을 때 를 구현 해준 것입니다
const server = http.createServer((request, response) => {
if(request.method === "POST"){
if(request.url === '/lower'){
let data = ''
request.on('data',(chunk)=>{
data = data + chunk
})
request.on('end',()=>{
data
})
}else
if(request.url === '/upper'){
}
if(request.method === "OPTION"){
}
});
그 다음에는 request on 을 이용하여 데이터를 받아옵니다 .
on('data', 콜백), on('end', 콜백) 으로 각각 request에 data가 있을 경우 처리를 해주는 부분과 data처리가 끝났음을 알려주는 부분으로 작성해줍니다 on 이라는 데이터 키워드를 넣어 주면 chunk 를 통해 바디의 값을 받아 올 수 있습니다 .
여기 까지 해주면 데이터를 어떯게 바꾸어 줄건지와 상태에 응답을 해주는 것 과 애러 처리를 해주면 됩니다
지금까지의 내용을 총 정리해서 부분부분 분리 해서 보자면
이렇게 네가지의 형태로 볼 수 있습니다
//-------------------------------------------------------------------------------------------
// 첫번째로 서버의 기본 구성과 서버를 만들어준 부분
let http = require('http')
const PORT = 3000;
const IP = 'localhost'
const server = http.createServer((request, response) => {
//-------------------------------------------------------------------------------------------
//if문을 통해 서버에 요청된 메소드를 확인하여 그 메소드가 요청하는 값을 전달 해주는 부분
if(request.method === "POST"){
if(request.url === '/lower'){//post 요청으로 lower이 들어왔을때 데이터를 처리해주는 부분
let data = "";
request.on('data',(chunk)=>{ //요청으로 들어온데이터를 chunk로 바디값을 받아와준 부분
data = data + chunk
})
request.on('end',()=>{ //이 요청이 끝날때 callback으로 요청을 처리해준부분
data = data.toLowerCase() //lower가 들어왔으니 데이터를 lower 해준 부분
response.writeHead(201, defaultCorsHeader);//데이터의 상태코드와 cors응답 , 헤더를 넣어주고
response.end(data)//마지막에 응답을 하기위한 메서드 end를 써주며 데이터를 전달 해줍니다
})
//-------------------------------------------------------------------------------------------
}else
if(request.url === '/upper'){ //이번에는 uppet가 들어온 경우에는 똑같은 동작을 하지만
let data = "";
request.on('data',(chunk)=>{
data = data + chunk
request.on('end',()=>{
data = data.toUpperCase() //데이터를 upperCase로 만들어주기만하면 됩니다
response.writeHead(201, defaultCorsHeader);
response.end(data)
})
//-------------------------------------------------------------------------------------------
}else{
response.writeHead(404, defaultCorsHeader);//그리고 그외에 다른 post요청이 들어왔을 때에는 애러를 처리해줍니다 404의 상태 코드로 애러라는것을 명시해주고
response.end("Not found 404");
//데이터를 전달 해주는 부분에서는 애러메세지를 띄워줍니다
}
}