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: []});
};

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으로 접속하니 렌더링이 잘 되는 것을 볼 수 있었다.
