이전 회원 API 설계
- 로그인 POST /login
- req : body (id,pwd)
- res : 000님 환영합니다 , 메인페이지
- 회원가입 POST /join
- req : body(id, pwd, name)
- res : 000님 환영합니다 ,로그인 페이지
- 회원정보(개별)조회 GET /users/:id
- req : URL (id)
- res : id,name
- 회원 개별 탈퇴 DELETE /users/:id
- req : URL(id)
- res : 000님 다음에 또 뵙겠습니다. 메인페이지
이전에는 위에 처럼 작성했는데 이제는 db의 도입으로 sql문을 활용할 수 있습니다.
회원 API 설계(SQL)
- 로그인 POST /login (SELECT)
- req : body (id,pwd)
- res : 000님 환영합니다 , 메인페이지
- 회원가입 POST /join (INSERT)
- req : body(email, pwd, name,contact)
- res : 000님 환영합니다 ,로그인 페이지
- 회원정보(개별)조회 GET /users/:id (SELECT)
- req : URL (emial)
- res : 회원객체를 통으로 전달
- 회원 개별 탈퇴 DELETE /users/:id (DELETE)
- req : URL(id)
- res : 000님 다음에 또 뵙겠습니다. 메인페이지
회원가입 INSERT
회원가입에서는 body에 값이 4개들어오기때문에 sql문에 물음표를 4개처리한뒤 두번째인자에 배열형태 즉 대괄호로 감싸고 전달해줘야합니다.
//회원가입
router.post('/join', (req, res) => {
console.log(req.body);
if (Object.keys(req.body).length) {
const {email,name,password,contact} = req.body
conn.query(
`INSERT INTO users (email,name,password,contact) VALUES(?,?,?,?)`,[email,name,password,contact],
function (err, results, fields) {
console.log(results);
res.status(201).json(results);
}
)
} else {
res.status(400).json({
message: `입력 값을 다시 확인해주세요`
})
}
})
결과입니다. postmain에서 body에 값을 작성한뒤send를 누르면
db에확인해보면 방금 post한 값이 잘 들어와있는것을 확인할 수 있습니다.
회원탈퇴 DELETE
delete입니다. email을 body로 받아서 sql문을 작성해주었습니다.
.delete((req, res) => {
let { email } = req.body;
console.log(email);
conn.query(
`DELETE FROM users WHERE email=?`,email,
function (err, results, fields) {
console.log(results);
res.status(200).json(results);
}
)
})
결과입니다.
실제로 db에서도 확인해보면 삭제가 되었습니다.
로그인 SELECT
로그인입니다. body에 email을 보내주었으며 해당 email로 sql문을 작성하였습니다. 추가적으로 예외처리도 해주었습니다.
//로그인
router.post('/login', (req, res) => {
let loginUser = {}
const { email, password } = req.body
conn.query(
`SELECT * FROM users WHERE email=?`,email,
function (err, results, fields) {
if(results.length)
{
loginUser=results[0];
if(loginUser.password == password){
res.status(200).json({
message: `${loginUser.name}님 로그인 성공`
})
}
else{
res.status(400).json({
message:"비밀번호가 틀렸습니다"
})
}
}
else{
res.status(404).json({
message: "회원 정보가 없습니다"
})
}
}
)
})
정상적인 값을 body에 실어서 보낸경우
비밀번호가 틀린경우
email이 db에 없는경우
코드를 현재 트렌드에 맞게 리팩토링해보았습니다. 네이버와 같은 사이트에서 로그인을 해보면 이메일이나 비밀번호가 틀린경우 처럼 하나의 경우로만 출력합니다.
//로그인
router.post('/login', (req, res) => {
const { email, password } = req.body
conn.query(
`SELECT * FROM users WHERE email=?`, email,
function (err, results, fields) {
var loginUser = results[0];
if (loginUser && loginUser.password == password) {
res.status(200).json({
message: `${loginUser.name}님 로그인 되었습니다.`
})
}
else {
res.status(404).json({
message: "이메일 또는 비밀번호가 틀렸습니다."
})
}
}
)
})
이전 채널 API 설계
- INSERT 채널 생성 : POST /channels
- req : body(name,user_id)
- res 201 : (channelTitle)님 채널을 응원합니다.
- UPDATE 채널 수정 : PUT /channels/:id
- req : URL(id) , body(name)
- res 200 : "채널명이 성공적으로 수정되었습니다. 기존 () -> 수정 () "
- DELETE 채널 삭제 : DELETE /channels/:id
- req : URL(id)
- res 200 : "삭제 되었습니다 " -> 메인페이지
- SELECT 채널 전체 조회 : GET /channels
- req : body(user_id)
- res 200 : 채널 전체 데이터 list, json array
- SELECT 채널 개별 조회 : GET /channels/:id
- req : URL(id)
- res 200 : 채널 개별 데이터
채널 개별 조회(select)
채널개별조회입니다. 이번에는 body에는 아무런 값이 없고 url에 id를 받아와서 sql문에 사용했습니다.
.route('/:id')
//채널개별조회
.get((req, res) => {
console.log('채널개별조회')
let { id } = req.params
id = Number(id)
conn.query(
`SELECT * FROM channels WHERE id=?`, id,
function (err, results, fields) {
console.log(results);
if (results.length) {
res.status(200).json(results);
}
else {
notFoundChannel(res)
}
}
)
})
결과입니다.
db에 없는 채널의 id를 넣은 경우
전체 채널 조회(SELECT)
전체채널조회입니다. 한유저가 여러개의 채널을 가질 수 있기때문에 userId를 Body로 받아서 SQL문에 사용하였습니다.
.route('/')
//채널 전체 조회
.get((req, res) => {
let { userId } = req.body
if(userId)
{
conn.query(
`SELECT * FROM channels WHERE user_id=?`, userId,
function (err, results, fields) {
console.log(results);
if (results.length) {
res.status(200).json(results);
}
else {
notFoundChannel(res)
}
}
)
}
else{
res.status(400).end()
}
})
채널생성(INSERT)
채널생성입니다. body에 name과 userId를 받아서 SQL문을 작성해주었습니다.
//채널 개별 생성
.post((req, res) => {
if (req.body.name&req.body.userId) {
const { name,userId } = req.body
conn.query(
`INSERT INTO channels (name,user_id) VALUES(?,?)`, [name, userId],
function (err, results, fields) {
res.status(201).json(results);
}
)
} else {
res.status(400).json({
message: `입력 값을 다시 확인해주세요`
})
}
})
문제점
하지만 지금 채널생성의 코드를 보면 Body에 name과 user_Id를 받는데 이 값이 정확한 값인지 아닌지를 알 수가 없습니다. 따라서 유효성검사를 해줘야 정확한 코드가 완성됩니다. 다음포스팅에서는 유효성검사를 해보겠습니다.
'백엔드 > node.js(express)' 카테고리의 다른 글
JWT (0) | 2023.12.26 |
---|---|
토이프로젝트 유튜브4 (유효성검사,next) (0) | 2023.12.23 |
토이프로젝트 유튜브3(DB생성,express-db연동,db모듈화) (0) | 2023.12.20 |
Docker MariaDB db생성 및 테이블생성(삽입,수정,join) (0) | 2023.12.19 |
토이프로젝트 유튜브2(채널 API 리팩토링) (2) | 2023.12.18 |