해결된 질문
작성
·
343
·
수정됨
0
const express = require('express');
const { User, Post, Image, Comment } = require('../models');
const router = express.Router();
console.log(Post); // undefined
router.get('/', async (req, res, next) => {
try {
const posts = await Post.findAll({
limit: 10,
order: [
['createdAt', 'DESC'],
[Comment, 'createdAt', 'DESC'],
],
include: [{
model: User,
attributes: ['id', 'nickname'],
}, {
model: Image,
}, {
model: Comment,
include: [{
model: User,
attributes: ['id', 'nickname'],
}],
}, {
model: User,
as: 'Likers',
attributes: ['id'],
}],
});
res.status(200).json(posts);
} catch (error) {
console.error(error);
next(error);
}
});
module.exports = router;
posts.js
const express = require('express');
const cors = require('cors');
const passport = require('passport');
const session = require('express-session');
const cookieParser = require('cookie-parser');
const dotenv = require('dotenv');
const morgan = require('morgan');
const db = require('./models');
const passportConfig = require('./passport');
const postRouter = require('./routes/post');
const userRouter = require('./routes/user');
const postsRouter = require('./routes/posts');
dotenv.config();
db.sequelize.sync()
.then(() => {
console.log('db 연결 성공');
})
.catch(console.error);
passportConfig();
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cors({
origin: true,
credentials: true,
}));
app.use(cookieParser(process.env.COOKIE_SECRET));
app.use(session({
saveUninitialized: false,
resave: false,
secret: process.env.COOKIE_SECRET,
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(morgan('dev'));
app.use('/posts', postsRouter);
app.use('/post', postRouter);
app.use('/user', userRouter);
app.listen(3065, () => {
console.log('3065포트 서버실행중');
});
app.js
(node:4192) Warning: Accessing non-existent property 'User' of module exports inside circular dependency
(node:4192) Warning: Accessing non-existent property 'Post' of module exports inside circular dependency
// 생략
영상보면서 코딩중에
위 문구와 함께 ../models에서 require한 것이
존재하지 않는 문제가 발생했습니다.
const { Post } = require('../models')
console.log(Post) 출력결과 undefined 입니다
이 문제가 posts.js 파일에서만 발생했습니다.
(user.js, post.js는 정상)
그래서 postss.js 라는 이름이 다르고 코드만 옮긴 파일을 만들어서 다시 시도해보았습니다.
(rename시 module not found 에러 발생)
그랬더니 ../models에서 require 한것이 존재했습니다.
근데 요청시
라우터(method: get, url: /posts)의 미들웨어가 실행이 안되는 문제가 있었습니다.
상태코드는 300 Multiple Choices 였습니다
이번에는 url를 바꿔서 요청을 보냈습니다
ex) /posts/test
그랬더니 성공했습니다.
왜 이런 현상이 발생했는지
어떻게 해결할 수 있는지 모르겠어서 질문남깁니다!
답변해주셔서 감사합니다
제가 멍청하게도 post model 파일에서
posts.js를 require했네요...
주석 작성하면서 자동완성된듯 합니다...
해당 코드를 지우는 것으로 순환참조 문제는 해결됐습니다.
그리고 요청시 상태코드가 300 그대로인 문제는 개발자도구에서 disable cache했더니 해결됐습니다..
쉽게 해결할 에러였는데 이것 때문에 몇시간을 썼네요 ㅠㅠ
에러메시지를 잘 읽어보고 꼼꼼하게 살펴봐야겠습니다.