Today I Learned
-
MYSQL COUNT, ASToday I Learned 2020. 1. 13. 11:49
문제 pagination 구현 도중, 클라이언트에게 최대 페이지 수를 전송하지 않아 빈 페이지를 출력하는 문제가 발생했다. 해결 MYSQL의 query를 이용해 최대 페이지 수를 구하고 response data에 추가해야 한다. 이를 구하기 위해 COUNT와 AS 문이 필요하다. COUNT를 이용해 총 row(document) 수를 구하고 response data에 추가하기 쉽도록 AS 문으로 원하는 변수명으로 바꿔준다. model/Board.js maxPage라는 쿼리 적용 함수를 따로 만들어 사용했다. AS 를 이용해 변수명을 cnt로 변경했다. routes/boards/index.js count 문을 이용해 총 row 수를 구하고 페이지 당 보여줄 게시글의 수(3개)로 나누면 최대 페이지 수가 나온다.
-
.envToday I Learned 2020. 1. 13. 10:57
dotenv .env 파일에 따로 환경변수를 저장할 수 있다. 그러면 DB나 다른 자신의 정보를 .env 파일에 분리해서, gitignore 파일로 그 정보만 따로 제외하고 공유 할 수 있다. 설치 .env 파일에서 환경변수를 로드 하기 위해서 dotenv 모듈을 사용한다. npm install --save dotenv 사용법 프로젝트 루트 경로에 .env 파일을 생성하고 해당 파일에 DB 접속 정보를 입력한다. DB_NAME=DotENV DB_USER=root DB_PASS=1234 DB_HOST=localhost .env routes/index.js 설정파일 사용 시 단점 설정파일의 확장자는 json 혹은 js 파일인데 통신 시, 암호화되지 않아 해킹의 위험이 있다. env를 사용하면 dotenv 모..
-
Javascript에서 === 을 권장하는 이유Today I Learned 2020. 1. 10. 12:25
공통점 둘 다 논리 연산자로서 피연산자들이 동일한지 비교해주는 연산을 수행한다. 차이점 ==는 Equal Operator이고, ===는 Strict Equal Operator이다. ==는 a == b 라고 할때, a와 b의 값이 같은지를 비교해서, 같으면 true, 다르면 false라고 한다.(값만 같으면 true이다.) 반면에, ===는 Strict, 즉 엄격한 Equal Operator로써, "엄격하게" 같음을 비교할 때 사용하는 연산자이다. ===는 a === b 라고 할때, 값과 값의 종류(Data Type)가 모두 같은지를 비교해서, 같으면 true, 다르면 false라고 한다. ==의 단점 ==은 비교 연산을 수행하기 이전에 두 피연산자를 강제적으로 같은 데이터 타입으로 변환한다. 이러한 변화..
-
MongoDB를 이용한 paginationToday I Learned 2020. 1. 10. 12:15
pagination 페이지로 데이터들을 나누지 않으면 많은 게시글로 인해 스크롤도 길어지고 서버로부터 받아야 하는 데이터의 양도 많아진다. 그래서 게시판 목록에 페이징을 적용하여 필요한 만큼만의 데이터를 보여줍니다. 이러한 기능을 pagination 이라고 한다. find().skip().limit() mongodb에서 제공하는 메소드 3가지를 이용해 pagination을 수행할 수 있다. find() : 해당 collection의 모든 document들을 찾는 메소드이다. skip(value) : value 만큼 document들을 생략하고 그 다음 document 부터 시작하는 메소드이다. limit(value) : find 한 document들 중에서 value 개만 출력하고 나머지는 무시하는 메소..
-
SequelizeToday I Learned 2020. 1. 10. 12:07
Sequelize란? nodeJS에서 mysql을 사용할 때 raw Query문을 사용하지 않고 ORM(Object-Relational Mapping)을 이용해 더욱 쉽게 다룰 수 있도록 도와주는 라이브러리이다. ORM이란 객체와 관계형 데이터베이스의 관계를 매핑 해주는 도구이다. 설치방법 터미널에 sequelize init 명령어를 사용하게 되면 config, models, migrations, seeders 폴더가 생성된다. models/index.js index.js 파일에서 반복문을 돌면서 models 폴더 내에 있는 파일들을 읽고, 그것들을 모델로 정의한다. 그래서 models에 원하는 테이블 이름을 파일의 이름으로 js 파일로 만들어 준 후 모델을 정의 하면 테이블이 만들어진다. 모델을 정의하..
-
MongoDB 다른 model의 require 문제Today I Learned 2020. 1. 10. 11:17
문제 미들웨어 구현 도중에 다른 collection의 document를 제어하는 작업이 필요해 그에 해당하는 model들을 require 하는 코드를 작성했다. 그러나 특정 함수 처리를 할 때, ~ is not function 에러가 발생했다. 해결 이유는 모르겠지만.. 다른 model에서 require 하지 않고 mongoose.model('User').updateOne({ _id: this.user_id }, {$push: {comments: this.board_id}}) 과 같이 mongoose에서 제공하는 메소드를 사용하면 문제를 해결할 수 있다.
-
MongoDB populateToday I Learned 2020. 1. 9. 18:07
문제 SQL의 JOIN 문과 같이 참조 collection의 정보를 조회해야 한다. 해결 mongodb에서 제공하는 populate 메소드를 이용해 collection 안에 다른 collection 정보들을 함께 담아서 전송할 수 있다. model/Board.js 참조할 속성에는 'ref'를 이용해 표시해야 한다. 그래야 어떤 모델을 참조할지 알 수 있다. routes/Boards/index.js find() 메소드 후에 populate 메소드를 실행하고, 입력 인자 안에는 참조에 필요한 속성명을 넣는다. 출처 https://mongoosejs.com/docs/populate.html Mongoose v5.8.5: Query Population Populate MongoDB has the join-lik..
-
getQueryToday I Learned 2020. 1. 8. 17:25
문제 미들웨어 구현 도중에 this 키워드로 값들을 불러오지 못한 오류가 발생했다. 해결 미들웨어를 적용할 함수들 중에서 이미 생성한 Schema 객체를 이용하는 것이 있고, 객체 안의 메소드만을 사용하는 것이 있다. 이미 생성한 객체를 이용할 경우, this 키워드로 값을 빼올 수 있지만, 객체 안의 메소드만을 사용할 경우, thisr가 아닌 getQuery를 이용해 함수의 입력 인자들을 받아서 사용할 수 있다. model/Likes.js 이 코드가 첫 번째 케이스이다. this 키워드로 전부 해결할 수 있다. 이 코드는 두 번째 케이스로 getQuery로 해결했다.