핸들러(handler)
- HTTP request가 날아오면 자동으로 호출되는 메소드 ( 스프링 : 컨트롤러)
- Node, app.HTTPMETHOD(path, 핸들러)
상태코드
- 2** : 성공
- 조회/수정/삭제 성공 : 200
- 등록성공 : 201
- 4** : 클라이언트 잘못
- 요청한 연산(처리)를 할 때 필요한 데이터(req)가 덜 왔을 때 :400
- 찾는 페이지(리소스)없음 즉 url에 맞는 api 없음 : 404
- 5** : 서버 잘못
- 서버가 죽었을 때(서버가 크리티컬한 오류를 맞았을 때) : 500
예외처리
이번에는 404와 같은 status를 출력해주도록 예외처리 해보겠습니다. 개별조회에서 fruits배열에 없는 id값을 요구하면 404를 출력하도록 하였습니다. res.status(상태코드).send("메시지")를 사용하면됩니다.
const express = require('express')
const app = express()
app.listen(3000)
const fruits =[
{
id:1, name :'apple'
},
{
id:2, name:'orange'
},
{
id:3, name:'strawberry'
},
{
id:4, name:'blueberry'
}
]
//과일전체조회
app.get('/fruits',(req,res)=>{
res.json(fruits)
})
//과일개별조회
app.get('/fruits/:id',(req,res)=>{
let id = Number(req.params.id);
let fruit = fruits[id-1];
if(fruit){
res.json(fruit);
}
else{
res.status(404).send("전달주신 id로 저장된 데이터가 없습니다.")
}
})
배열에 있는 id를 입력한 경우
배열에 없는 id를 입력한 경우 Body에 404 Not Found라고 뜨면서 알맞은 문장이 출력됩니다.
기존에 작성하였던 코드 하나를 예외처리 해보겠습니다.
(get,delete,put) 예외처리
이전코드입니다.
app.get('/youtubers',(req,res)=>{
var youtubuers = {}
db.forEach((value,key)=>{
console.log(value);
youtubuers[key] = value
})
res.json(youtubuers);
})
예외처리를 추가한 수정코드입니다. map자료형인 db를 size로 체크해주어 데이터가 하나도 없으면 404, 에러메시지를 출력하도록 하였습니다.
app.get('/youtubers',(req,res)=>{
var youtubuers = {}
if(db.size>=1)
{
db.forEach((value,key)=>{
console.log(value);
youtubuers[key] = value
})
res.json(youtubuers);
}
else{
res.status(404).json({
message:"조회할 유튜버가 없습니다."
})
}
})
get과 delete, put의 예외처리는 404로 동일하게 해주면되는데 post의 예외처리는 좀 다릅니다.
post 예외처리
post코드입니다.
app.use(express.json()) //미들웨어 :json 설정
app.post('/youtubers', (req,res)=>{
console.log(req.body);
//Map 등록
db.set(id++,req.body);
res.json({
message : `${db.get(id-1).channelTitle} 님, 유튜버 생활을 응원합니다!`
});
})
현재 post를 할때 body의 값을 넣지 않고 요청하면 아래처럼 결과가 나옵니다.
기존의 코드에서 if-else를 만들어 예외처리를 해줍니다. 기존의 get과 delete put에서는 404에러(찾는 페이지(리소스)없음)을 작성해주었는데 post에서는 400에러(요청한 연산(처리)을 할때 필요한 데이터(req)가 덜 왔을 때)를 작성해줍니다.
- 2** : 성공
- 4** : 클라이언트 잘못
- 5** : 서버 잘못
app.use(express.json()) //미들웨어 :json 설정
app.post('/youtubers', (req, res) => {
const channelTitle = req.body.channelTitle
if (channelTitle) {
//Map 등록
db.set(id++, req.body);
res.json({
message: `${db.get(id - 1).channelTitle} 님, 유튜버 생활을 응원합니다!`
});
}
else{
res.status(400).json({
message:"요청 값을 확인해주세요."
})
}
})
'백엔드 > node.js(express)' 카테고리의 다른 글
토이프로젝트 유튜브2(채널 API 리팩토링) (2) | 2023.12.18 |
---|---|
토이프로젝트 유튜브1(회원API설계), router (0) | 2023.12.18 |
Node.js-Express(Delete,put), HTTP상태코드 (0) | 2023.12.15 |
Expess Post(Postman, app.use()함수) (0) | 2023.12.11 |
Express 구조 이해하기(express,generator) (0) | 2023.12.11 |