DB를 이용하여 채널 개별 삭제하기 유효성 검사 param("id").notEmpty().withMessage("채널번호 필요") 채널 개별 삭제 let { id } = req.params; id = parseInt(id); const delete_sql = "delete from channels where id = ?"; try { const [data] = await conn.query(delete_sql, id); if (data.affectedRows == 0) { return notFoundChannel(res); } res.status(200).json({ message: `그동안 유튜브를 이용해 주셔서 감사합니다.` }); } catch (err) { return res.status(400)..
분류 전체보기
DB를 이용하여 채널 개별 조회하기 유효성 검사(express-validator) 이번 유효성 검사는 params로 받아오기때문에 param을 통해서 비어있지 않은 경우를 확인하기로 했습니다. [param("id").notEmpty().withMessage("id 값이 없습니다.")] 채널 개별 조회 조회는 SELECT문을 사용하는데요 id값이 존재 하지 않는 경우에는 undefined를 받기 때문에 if문에 걸려서 notFoundChannel이 호출이 되고 return시켜 아래 코드를 읽지 않게 됩니다. let { id } = req.params; id = parseInt(id); const select_sql = "select * from channels where id = ?"; try { cons..
DB 이용하여 채널 생성하기 유효성 검사(express-validator) if (!email) { return res.status(400).json({ message: "이메일을 입력해주세요" }); } if (!title) { return res.status(400).json({ message: "채널명을 입력해주세요." }); } 이존의 이 코드들을 validator를 이용하여 유효성 검사로 빠지게 되었습니다. 유효성 검사 코드는 아래 코드로 대체하였습니다. [body("email").notEmpty().withMessage("이메일을 입력해주세요") .isEmail().withMessage("이메일 형식이 아닙니다."), body("title").notEmpty().withMessage("채널명을..
앞서 공부한 회원가입, 회원 개별 조회, 회원 개별 탈퇴와는 다르게 id가 존재하는지 password가 일치하는지를 확인을 하는 작업을 로그인 핸들링함수에서 작성을 해주셔야 하는데요. 때문에 조회, 탈퇴, 가입과 다르게 코드가 조금 복잡해져서 맨 마지막으로 작업하게 되었습니다. 로그인 왜 회원 조회를 하는데 get이 아닌 post를 사용하나요? 로그인할때 우리가 받아오는 id와 password 값의 노출을 막기 위해 안전한 body에 넣어서 사용하는데요. 보통 body 값은 사용자가 form을 통해서 전송을 했을 때 전달을 받을 수 있습니다. 즉 form을 통해서 전달을 받으면 post를 사용한다는 것을 알 수 있습니다. app.post("/login", (req, res) => { const { id,..
개별조회와 삭제는 경로가 일치하기 때문에 .route를 이용하여 묶어서 작업하려고 합니다. app .route('경로') .get(핸들러함수) .delete(핸들러함수) 이 코드에서 핸들러 함수를 작성한다고 봐주시면 좋을 것 같습니다. 회원 개별 탈퇴 .route('/users/:num') .delete((req,res)=>{ let { num } = req.params; num = parseInt(num); if (!db.has(num)) { res.status(404).json({ message: "찾는 유저가 없습니다." }); return; } const user = db.get(num); db.delete(num); res.status(200).json({ message: `${user.name..
개별조회와 삭제는 경로가 일치하기때문에 .route를 이용하여 묶어서 작업하려고 합니다. app .route('경로') .get(핸들러함수) .delete(핸들러함수) 이 코드에서 핸들러 함수를 작성한다고 봐주시면 좋을 것 같습니다. 회원 개별 조회 .route('/user/:num') .get((req, res)=>{ let { num } = req.params; num = parseInt(num); const user = db.get(num); if (!db.has(num)) { res.status(404).json({ message: "찾는 유저가 없습니다." }); return; } res.status(200).json({ userId: user.id, name: user.name }); }) 조..
API 설계를 따른 틀을 작성을 하고 나면 이제 조금씩 살을 덧대는 작업을 진행하게 되는데요. 아직 데이터베이스를 건들지 않아서 Map객체를 이용하고 있습니다. 회원가입 app.post("/join", (req, res) => { const data = req.body; db.set(idx++, data); // 아직 아이디 중복 가능 console.log(data); if (!data || !data.id || !data.password || !data.name) { res.status(400).json({ message: "입력 값을 다시 확인해주세요" }); return; } res.status(201).json({ //등록성공 상태코드 : 201 message: `${db.get(idx - 1)...
Object를 이용한 객체 확인 const obj = {} const obj2 = {message : '안 빈 객체'} console.log(Object.keys(obj)) // [] console.log(Object.keys(obj2)) // ['message'] 여기 두 가지의 객체가 존재합니다. 첫 번째는 빈객체, 두 번째는 비어있지 않은 객체, 이 두 객체를 console.log로 찍어보면 첫 번째 객체는 빈 배열, 두 번째 객체는 message가 들어있는 배열이 나오는 걸 확인할 수 있는데요. 즉, 객체안의 key값을 받아오는 함수가 바로 keys입니다. (이 keys는 Object 뿐만 아니라 Map에서도 사용되니 참고하면 좋을것 같네요.) 배열 안에 들어가 있으니 우리는 이 배열의 길이를 잴..
오늘 수업 내용 📚 핸들러란? 객체와 일치하는 데이터를 찾는 find 백엔드에서 예외처리 미니 프로젝트 - youtube 안정성을 위한 예외처리를 어제 공부를 했는데 이 예외처리는 사실 프론트, 백 둘 다 해당되는 얘기였다면 오늘 배운 예외처리는 백엔드에서 예외처리를 해줘야하는 것과 이 처리를 해주면 프론트엔드에서 어떻게 좋은지에 대해서 알 수 있었습니다. 항상 프론트에서 일을 더 하냐 백에서 일을 더하냐로 이야기가 많이 나오는 걸 알고 있습니다. 예를 들어서 토큰관리를 어디서 할 것인가? 유효성검사를 어디서 할 것인가 같은 이야기들 말입니다. 사실 오늘 배운 이야기도 이것과 관련이 있지 않을까 생각이 들었습니다. 백엔드에서 해주면 감사하고 안 해주면 프론트에서 다시 한번 검사를 한다고 생각을 했기 때문..