MongooseError: Model.find() no longer accepts a callback

iiingkeep·2024년 5월 9일

Errors

목록 보기
2/6

MongooseError: Model.find() no longer accepts a callback


상황: MongoDB를 사용해보기 위해 강의를 듣던 중, Video 모델 생성 후 Model.find() 함수를 사용해 콘솔 내용을 확인하려고 하니 에러 발생.


Model.find()는 mongoose에서 지원하는 함수로, 찾고자하는 문서를 검색할 때 이용한다. 콜백함수 또는 promise 형식으로 사용 할 수 있다고 나와있다.

https://mongoosejs.com/docs/api/model.html#Model.find()

2년정도 이전에 올라온 강의를 듣고 있었는데, 이 강의에서는 콜백함수를 이용해 Model.find() 함수를 사용했다. 그 내용을 그대로 옮겨보자면 다음과 같다.

models 파일의 Video.js

import mongoose from 'mongoose';

const videoSchema = new mongoose.Schema({
  title: String,
  description: String,
  createdAt: Date,
  hashtags: [{ type: String }], //배열로 설정하기 위해 [] 사용
  meta: {
    views: Number,
    rating: Number,
  }
});

const Video = mongoose.model('Video', videoSchema);
export default Video;

controllers 파일의 videoController.js

import Video from '../models/Video';

export const home =(req,res) => {
  Video.find({}, (error, videos) => {
    console.log('errors', error);
    console.log('videos', videos);
  });
  return res.render('home', {pageTitle: 'Home', videos: []});
};

위와 같이 코드를 작성한 뒤 콘솔의 내용을 확인해보기 위해 localhost4000 으로 접속하니 다음의 현상이 발생하였다.

MongooseError: Model.find() no longer accepts a callback

mongoose에러인데, Model.find() 함수가 더 이상 콜백함수를 지원하지 않는다는 것이다.
찾아보니 mongoose 6.0 이상의 버전에서는 콜백함수를 지원하지 않아 promise 형식을 사용해야 한다고 한다.
아래는 이러한 내용이 담겨있는 페이지이다.
https://stackoverflow.com/questions/75586474/mongoose-stopped-accepting-callbacks-for-some-of-its-functions

그래서 콜백함수 형식으로 작성했던 코드를 promise 형식으로 바꿔줘야 했다.

controllers 파일의 videoController.js

import Video from '../models/Video';

export const home = (req,res) => {
  Video.find({})
  .then((videos) => {
    console.log('videos', videos);
    return res.render('home', {pageTitle: 'Home', videos: [] });
  })
  .catch((error) => {
    console.log('error', error);
  })
}

코드 변경 후 다시 localhost4000으로 접속하니 렌더링이 잘 되는 것을 볼 수 있었다.
에러해결

원인: mongoose 6.0 이상의 버전에서는 더 이상 콜백함수를 지원하지 않는다.

해결: 다른 방법인 promise 형식으로 코드를 바꿔 작성해준다.

profile
혁신적인 백엔드 개발자가 되고자, 기록✏️

0개의 댓글