- 회원가입 - POST /signup
- 로그인 - POST /signin
- 회원 개별 조회 - GET /users/:id
- 회원 개별 탈퇴 - DELETE /users/:id
회원가입 : POST
app.post('/signup', (req, res) => {
if (req.body == {}) {
res.status(400).json({
message: '입력 값을 다시 확인해주세요.'
})
} else {
db.set(id++, req.body)
res.status(201).json({
message: `${db.get(id-1).name}님 환영합니다.`
})
}
})
요청 바디에는 id, pwd, name 등이 올 수 있다.
요청 바디로 들어온 회원 정보를 db에 저장하고, 성공했다는 응답 코드를 돌려준다.
id++ 을 하는 이유는 자동으로 1을 올려주기 위함 (하나의 객체를 유니크하게 구별하기 위함)
아직 db랑 연결을 안 하고 설계하는 과정이라 수동으로 하고 있다 . ㅎㅎ
회원 개별 조회 : GET
app.get('/users/:id', (req, res) => {
const id = parseInt(req.params.id)
const user = db.get(id)
if (user == undefined) {
res.status(404).json({
message: "회원 정보가 없습니다."
})
} else {
res.status(200).json({
userId: user.userId,
name: user.name,
})
}
})
조회하고 싶은 회원의 id를 params로 받는다.
params는 모두 문자열로 들어오기 때문에 parseInt로 정수로 변환한다.
회원의 id를 db에서 찾고,
존재하지 않는다면 상태코드 404와 회원정보가 없다는 메세지를 보냄
존재한다면 상태코드 200과, id와 일치하는 회원 정보를 응답으로 넘겨준다.
회원 개별 탈퇴
// 회원 개별 탈퇴
app.delete('/users/:id', (req, res) => {
const id = parseInt(req.params.id)
const user = db.get(id)
if (user == undefined) {
res.status(404).json({
message: "회원 정보가 없습니다."
})
} else {
db.delete(id)
res.status(200).json({
message: `${user.name}님, 다음에 또 뵙겠습니다.`
})
}
})
회원 개별 조회와 거의 비슷하다.
params로 회원의 id를 받고 있다면 db에서 삭제, 없다면 상태코드 404와 에러 메세지 반환
route를 활용한 코드 리팩토링 - 회원 개별 조회 / 회원 개별 탈퇴
개별조회와 개별탈퇴는 http method만 다르고 url이 같다.
route를 이용해 중복 코드를 줄일 수 있다.
app
.route('/users/:id')
.get()
.delete()
중복되는 url을 묶고, 아래 메서드들로 분리 할 수 있다.
각 메서드 괄호 안에는 해당 요청이 들어왔을 때의 실행할 콜백 함수만 넣어주면 된다.
app
.route('/users/:id')
// 회원 개별 조회
.get((req, res) => {
const id = parseInt(req.params.id)
const user = db.get(id)
if (user == undefined) {
res.status(404).json({
message: "회원 정보가 없습니다."
})
} else {
res.status(200).json({
userId: user.userId,
name: user.name,
})
}
})
// 회원 개별 탈퇴
.delete((req, res) => {
const id = parseInt(req.params.id)
const user = db.get(id)
if (user == undefined) {
res.status(404).json({
message: "회원 정보가 없습니다."
})
} else {
db.delete(id)
res.status(200).json({
message: `${user.name}님, 다음에 또 뵙겠습니다.`
})
}
})
로그인
1. db를 순회하면서, 요청받은 userId가 db에 있는지 확인
2. 있다면 해당 객체의 정보를 loginUser에 담는다. (없으면 loginUser는 빈 값이 됨)
3. loginUser가 빈 값인지 확인하고, (빈 값이 아니면 > userId가 일치한다는 것)
4. 요청받은 pwd가 해당 userId의 pwd와 같은지 확인
// 로그인
app.post('/signin', (req, res) => {
var loginUser = {}
const { userId, password } = req.body
// userId가 db에 저장된 회원인지 확인
db.forEach((user, idx)=>{ // data, idx, totalData
if (user.userId === userId) { // 요청데이터 userId와 db에 있는 userId가 같은지 확인
loginUser = user
}
})
// userId 값을 못 찾았으면
if(isExisted(loginUser)) {
// pwd도 맞는지 비교
if (loginUser.password === password) {
console.log('비번도 같아')
} else {
console.log('틀렸다.')
}
} else {
console.log('없는 아이디입니다.')
}
})
Object.keys(obj)의 길이가 0이라면, 비어있는 것 (속성 이름이 하나도 존재하지 않는다는 것이기 때문)
Object.keys() > 객체의 속성 이름을 배열로 얻을 수 있는 메서드
// 객체가 비었는지 확인하는 함수
function isExisted(obj) {
if (Object.keys(obj).length) {
return true
} else {
return false
}
}
'졸업작품 > Node.js' 카테고리의 다른 글
Express - params, query(쿼리 문자열) (0) | 2024.04.18 |
---|---|
RESTful API 및 HTTP 프로토콜 기본 개념 (0) | 2024.04.17 |