분류 전체보기
-
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..
-
react 7Javascript/React.js 2020. 1. 9. 10:32
life cycle method component를 생성하고 없애는 방법 Mounting component가 새롭게 생성되는 시점이다. component 함수가 실행되고 결과물로 나온 Element 들이 Virtual DOM에 삽입되고 실제 DOM을 업데이트하기까지의 과정이다. constructor : class를 생성할 때 사용하는 JS 문법이다. component가 mount될 때, constructor를 호출한다. 그리고 나서 render function을 호출한다. componentDidMount : 결과물이 DOM에 mount된 직후 실행되는 메소드이다. Update state나 props가 변경이 되면 update가 진행되며 다시 rendering 된다. component가 update 될 때..
-
react 6Javascript/React.js 2020. 1. 8. 23:41
state 존재하지 않으면서 변화하는 dynamic data을 사용하기 위한 객체이다. class component 지금까지 배운 것은 function component이다. 그러나 이제는 메소드와 객체들을 사용하기 위해서, 그 중에서도 state를 사용하기 위해서 React.Component로부터 확장된 class component를 사용할 것이다. 예를 들어, 핸드폰이 React.Component 라면 우리가 만들 class App은 삼성이라고 볼 수 있다. render() 뷰를 렌더링 해주는 함수이다. Virtual DOM을 사용하기 때문에 refresh한 경우, 변화가 있는 부분만 업데이트된다. setState() state를 변경하기 위해서는 setState function을 이용해야 한다. 그..
-
getQueryToday I Learned 2020. 1. 8. 17:25
문제 미들웨어 구현 도중에 this 키워드로 값들을 불러오지 못한 오류가 발생했다. 해결 미들웨어를 적용할 함수들 중에서 이미 생성한 Schema 객체를 이용하는 것이 있고, 객체 안의 메소드만을 사용하는 것이 있다. 이미 생성한 객체를 이용할 경우, this 키워드로 값을 빼올 수 있지만, 객체 안의 메소드만을 사용할 경우, thisr가 아닌 getQuery를 이용해 함수의 입력 인자들을 받아서 사용할 수 있다. model/Likes.js 이 코드가 첫 번째 케이스이다. this 키워드로 전부 해결할 수 있다. 이 코드는 두 번째 케이스로 getQuery로 해결했다.
-
mongoose middleware 제작Today I Learned 2020. 1. 8. 17:16
문제 다른 document의 내용을 manual reference 통해 참조하는 방법을 채택하고 프로젝트를 진행했다. 그러나, 어떤 document가 삭제되었을 때, 이것을 참조하는 document에서는 cascade 하게 삭제되지 않는 문제가 발생했다. 해결 stackoverflow에서 비슷한 사례들을 찾아본 결과, 자체적으로 연쇄적으로 지워주는 기능을 수행하는 미들웨어를 제작하는 방법으로 해결했다. 그래서 model 폴더에 존재하는 각각의 파일들에 미들웨어를 제작해 사용했다. model/Comment.js 위의 코드는 getQuery를 통해 함수의 입력 파라미터를 받고, 두 번의 query를 이용해 User, board document에 필요없는 _id 값을 삭제하는 기능을 수행하는 미들웨어이다. 출..