트러블슈팅

[트러블슈팅] mongoose find not working

2021. 3. 10. 02:11

몽구스 모듈을 이용해 스키마와 메소드를 정의하던 중 다음과 같은 에러가 발생했다.

this.find is not a function

 

에러가 발생한 코드는 다음과 같다.

userSchema.static('findById', (id, callback) => {
	return this.find({id:id}, callback);
});

userSchema.static('findAll', (callback) => {
	return this.find({}, callback);
});

 

이는 this binding에 대한 개념이 없어서 발생한 문제였다.

 

기존 JavaScript에선 함수 선언 시 this에 바인딩할 객체가 동적으로 결정되었다.

하지만, arrow function을 사용하면 바인딩할 객체가 정적으로 결정된다. 즉, 함수 안의 this가 상위 스코프의 this를 가리키게 되는 것이다. 

 

위에서 선언한 this는 메소드를 호출한 객체와 바인딩하기 위해 사용한 코드로, 다음과 같이 full function의 형태로 코드를 수정한다. 

userSchema.static('findById', function(id, callback) {
	return this.find({id:id}, callback);
});

userSchema.static('findAll', function(callback) {
	return this.find({}, callback);
});

이로써 메소드 내부 코드에서 사용된 this는 해당 메소드를 호출한 객체로 바인딩된다.

 

참고

1. arrow function this binding

happycording.tistory.com/entry/Arrow-function-%EB%B9%84%EB%B0%80%EC%9D%84-%ED%8C%8C%ED%97%A4%EC%B3%90%EB%B3%B4%EC%9E%90-ES6

 

JavaScript arrow function 비밀을 파헤쳐보자 (ES6)

arrow function에 대해서 머리속으로 정리해보고자 합니다. 이번 시간에도 마찬가지로 arrow function(ES6) 이 나오기 전 어떤 현상이 있었고 그 현상을 어떻게 해결 했는지에 대해 이야기 하겠습니다. arr

happycording.tistory.com

2. this binding

velog.io/@litien/Javascript-This-Binding

 

[Javascript] This Binding

어제 만난 웨일 확장앱을 개발하면서 만난 이슈는 다음과 같다. Class 내부의 콜백함수에서 클래스 내부 메소드를 호출하는데 this가 바인딩되지 않아 함수 호출이 이루어지지 않았다. fetch API를

velog.io

3. why in mongoose find not working?

dev-qa.com/272940/why-in-mongoose-find-not-working

 

Why in mongoose find not working? - IT & Development questions

Do not declare methods using ES6 arrow functions (=>). Arrow functions explicitly prevent this binding, so your method will not have access to the document and the above examples will not work.

dev-qa.com

 

 

저작자표시 비영리 (새창열림)

'트러블슈팅' 카테고리의 다른 글

[트러블슈팅] ER_CON_COUNT_ERROR: Too many connections  (1) 2021.05.06
[트러블슈팅] Uncaught ReferenceError: kakao is not defined  (5) 2021.04.29
[스크랩] 누구나 한 번쯤은 띄워본 JavaScript 에러 TOP 10.  (0) 2021.02.20
[트러블슈팅] FastAPI CORS 에러  (0) 2021.02.13
[트러블슈팅] LF/CRLF 에러  (0) 2021.01.20
'트러블슈팅' 카테고리의 다른 글
  • [트러블슈팅] ER_CON_COUNT_ERROR: Too many connections
  • [트러블슈팅] Uncaught ReferenceError: kakao is not defined
  • [스크랩] 누구나 한 번쯤은 띄워본 JavaScript 에러 TOP 10.
  • [트러블슈팅] FastAPI CORS 에러
코택
코택
코택
TaxFree
코택
전체
오늘
어제
  • 분류 전체보기 (369)
    • Spring (29)
      • Spring (18)
      • 스프링 핵심 원리 - 고급편 (11)
    • Spring Batch (4)
    • JPA (4)
    • CS (89)
      • 자료구조 (2)
      • 네트워크 (5)
      • 운영체제 (1)
      • 데이터베이스 (4)
      • SQL (7)
      • 알고리즘 이론 (4)
      • 알고리즘 문제 풀이 (66)
    • 웹 (28)
      • React.js (4)
      • Next.js (1)
      • Node.js (14)
      • FastAPI (4)
      • Django (5)
    • 프로그래밍 언어 (45)
      • Python (5)
      • Java + Kotlin (29)
      • JavaScript + TypeScript (11)
    • 테스트코드 (26)
      • ATDD, 클린 코드 with Spring (4)
      • 이규원의 현실 세상의 TDD: 안정감을 주는 코드.. (20)
    • 인프라 (6)
      • AWS (2)
      • Kubernetes (4)
    • 트러블슈팅 (25)
    • 책 (89)
      • Effective Java (54)
      • Effective Kotlin (14)
      • 도메인 주도 개발 시작하기: DDD 핵심 개념 정.. (11)
      • 웹 프로그래머를 위한 데이터베이스를 지탱하는 기술 (6)
      • 도메인 주도 설계 첫걸음 (4)
    • Git (10)
    • 회고 (5)
    • etc (8)

블로그 메뉴

  • 홈
  • 방명록
  • 관리
  • GitHub
  • LinkedIn

공지사항

  • 스킨 관련

인기 글

태그

  • 장고
  • atdd
  • 그래프 탐색
  • 브루트포스
  • fastapi
  • 백준
  • Shortest Path
  • dp
  • 파이썬
  • mysql
  • Git
  • BOJ
  • 그래프
  • http
  • 깊이 우선 탐색

최근 댓글

최근 글

hELLO · Designed By 정상우.
코택
[트러블슈팅] mongoose find not working
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.