SubQuery 작성위치 SubQuery를 작성하는 위치로는 SELECT, FROM, WHERE가 있습니다. 그중에 SELECT와 FROM에서 발생한 오류를 정리해 보려 합니다. - SELECT에서 SubQuery 작성하기 select 안에 select를 작성할 때는 결과 값이 1행이어야만 합니다. idx title name number 1 안녕 홍길동 20 2 하세요 아무개 30 SubQuery 결괏값이 2행인 테이블 SubQuery 결과가 위의 표처럼 1행 이상일 경우에 아래와 같은 오류가 발생합니다. 혹시 아래와 같은 오류가 난다면 SELECT문 결과 값이 1행인지 확인해 보시기 바랍니다. 발생오류 Error Code: 1242. Subquery returns more than 1 row - FRO..
작업환경 mysql workbench8.0 발생오류 Error 1005: Can't create table `bookstore`.`likes` ( errno: 121 "Duplicate key on write or update") SQL Statement: CREATE TABLE `Bookstore`.`likes` ( ... ) 원인 Foreign Key name(외래키 이름)은 다른 테이블에서 사용한 Foreign Key name을 그대로 사용할 수 없음. ex) user table의 외래키 이름을 A라고 하고, book table 생성 중에 의 외래키 이름을 똑같이 A라고 설정을 하면 book table은 생성이 되지 않고 오류가 발생합니다. 즉 외래키 이름을 A가 아닌 B로 변경을 해야 합니다.
프로젝트 팀원 전다해🐣 프로젝트 정보 - project github 프로젝트 목적 book store 사이트 개발을 위한 서버 및 API 구축 프로젝트 기능 - 회원 : 로그인 시. JWT 토큰을 이용한 인증 인가 사용 - 장바구니 - 좋아요 - 결제 프로젝트 기간 2023.12.28 ~ 프로젝트 구조 project-book-store ├─ .env ├─ app.js └─ routes ├─ books.routes.js ├─ carts.routes.js ├─ likes.routes.js ├─ orders.routes.js └─ users.routes.js 사용 스킬 발생 이슈 - 2024-01-01 : 테이블 생성이 안되는 이슈 발견 - 2024-01-04 : SubQuery 코드 작성 오류
리팩토링 정리 1. 불필요한 코드 (Map 객체 잔재) + console.log 삭제, if 중괄호 통일 2. 코드로 설명이 안되는 부분에 주석 작성 그외에는 주석 삭제 3. 문자열의 경우 값을 빼서 문자열 자체로 넣기보다 변수로 지정해서 변수를 입력하기(ex. sql) 4. 모든 callback 함수에 express-validator의 err값 호출이 들어가기 때문에 해당 코드는 모듈화 하여 코드에서 빼 작성 const express = require("express"); const router = express.Router(); const conn = require("../mariadb"); const { body, param, validationResult } = require("express-va..
리팩토링 정리 1. 불필요한 코드 (Map 객체 잔재) + console.log 삭제, if 중괄호 통일 2. 코드로 설명이 안되는 부분에 주석 작성 그외에는 주석 삭제 3. 문자열의 경우 값을 빼서 문자열 자체로 넣기보다 변수로 지정해서 변수를 입력하기(ex. sql) const express = require("express"); const router = express.Router(); const conn = require("../mariadb"); router.post("/login", async (req, res) => { const { email, password } = req.body; const select_sql = "select * from users where email = ?;" c..
지금까지 미니프로젝트에서 data를 database Schema를 만드는 게 아니라 Map 객체를 이용해서 사용을 했었는데요. 본격적으로 시작하기 앞서서 database를 만들 때 참고할 ERD를 짜보려고 합니다. 테이블은 두 가지로 만들 건데요. 첫 번째로 user 테이블, 두 번째로 channel 테이블을 만들어볼 예정입니다. 1) USER TABLE 필요 데이터 : 회원번호, 회원아이디, 회원비밀번호, 회원이름 이때 회원번호는 고유번호로 PK, 회원아이디도 단 하나의 아이디여야 하기 때문에 UQ, 로 설정을 하려 합니다. 회원번호(PK) 아이디(UQ) 비밀번호 이름 1 testId1 1234 테스터1 2 testId2 9876 테스터2 2) CHANNEL TABLE 필요데이터 : 채널번호, 채널주인..
그동안 user와 channel을 각각의 파일에서 작업을 하고 확인을 진행하였는데요. 이제 router를 이용하여 router 관리를 해보려합니다. 폴더구조 정리 기존에 루트 폴더에 있던 channels.js와 users.js를 routes폴더 안에 넣고, 서버구동에 사용하는 app.js를 생성하였습니다. root ├─ app.js └─ routes ├─ channels.js └─ users.js 이제 router로 관리를 하기 위해서 channels와 users 파일을 모듈로 만드는 작업을 해보려 합니다. 기존 channels와 users 파일 //기존의 app을 router로 변경 const app = express(); → const router = express.Router(); app.get(경..
DB를 이용하여 채널 전체 조회하기 유효성 검사 body("user_id").notEmpty().withMessage("user_id를 입력해주세요") .isInt().withMessage("user_id 데이터가 잘못입력되었습니다.") 채널 전체 조회 이미 유효성 검사를 통해서 user_id 값이 undefined로 넘어오는것이 아니기 때문에 해당 부분을 if(data.length === 0)으로 조건을 넘겼고, 해당 조건이 일치할경우는 user_id값을 갖고있는 채널이 존재하지 않다는 뜻이기 때문에 notFoundChannel함수를 사용하였습니다. const { user_id } = req.body; try { const select_sql = "select * from channels where u..
DB를 이용하여 채널 개별 수정하기 유효성 검사 채널 개별 수정의 경우에는 param을 통해 채널번호를 받고, body값으로는 title과 description을 받지만 description은 필수항목이 아니기 때문에 유효성검사에서는 제외하였습니다. param("id").notEmpty().withMessage("채널번호가 없습니다."), body("title").notEmpty().withMessage("제목을 입력하세요"), 채널 개별 수정 let { id } = req.params; id = parseInt(id); const { title, description } = req.body; const update_sql ="update channels set title = ? , description..