인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

신민규님의 프로필 이미지
신민규

작성한 질문수

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

좋아요 기능 구현중 에러 질문입니다.

작성

·

390

0

1.PNG2.jpg4.jpg첫번째 부터 순서대로post모델,user모델 passport.index의 deserializeUser부분 route.page 부분 입니다.



User is associated to User multiple times. To identify the correct association, you must use the 'as' keyword to specify the alias of the association you want to include.

 

 

위 같은 오류가 뜨는데 어떤게 문제인지 아무리 찾아봐도 모르겠습니다..

답변 1

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

서버 재시작하면 사라질 것 같은데요? include에도 as 넣어서 하셨나요?

신민규님의 프로필 이미지
신민규
질문자

image3번재 사진이 안올라갔네요 만약 deserializeUser 이 부분 include를 말씀하시는거면 넣었는데도 재시작해도 오류가 뜨네요ㅜㅜㅜ

신민규님의 프로필 이미지
신민규
질문자

routes/user.js

const express = require("express");
const router = express.Router();
const { isLoggedIn } = require("../middlewares");
const { follow, followOut, like, likeC } = require("../controllers/user");


router.post("/:id/follow", isLoggedIn, follow);
router.delete("/:id/followOut", isLoggedIn, followOut);
router.post("/:postId/like", isLoggedIn, like);
module.exports = router;

controllers/user.js

const User = require("../models/user");
const Post = require("../models/post");


exports.follow = async (req, res, next) => {
    try {
        const user = await User.findOne({ where: { id: req.user.id } });
        if (user) {
            user.addFollowings(parseInt(req.params.id, 10));
            res.send("success");
        } else {
            res.status(404).send("no user");
        }
    } catch (error) {
        console.error(error);
        next(error);
    }
};


exports.followOut = async (req, res, next) => {
    try {
        const user = await User.findOne({ where: { id: req.user.id } });
        if (user) {
            user.removeFollowings(parseInt(req.params.id, 10));
            res.send("success");
        } else {
            res.status(404).send("no user");
        }
        console.log(User);
    } catch (error) {
        console.error(error);
        next(error);
    }
};


exports.like = async (req, res, next) => {
    try {
        const user = await User.findOne({
            where: { id: req.user.id },
            include: { model: Post },
        });
        if (user) {
            user.addLikings(parseInt(req.params.postId, 10));
            
            res.send("success");
        } else {
            res.status(404).send("no user");
        }
    } catch (error) {
        console.error(error);
        next(error);
    }
};


exports.likeC = (req, res, next) => {};

/passport/index.js

const passport = require("passport");
const local = require("./localStrategy");
const kakao = require("./kakaoStrategy");
const User = require("../models/user");
const Post = require("../models/post");


module.exports = () => {

    passport.serializeUser((user, done) => {

        done(null, user.id); 
    });

    passport.deserializeUser((id, done) => {
       
        User.findOne({
            where: { id },
            include: [
              
                {
                    model: User, //팔로잉
                    attributes: ["id", "nick"],
                    as: "Followers",
                },
                {
                    model: User, //팔로워
                    attributes: ["id", "nick"],
                    as: "Followings",
                },
                {
                    model: User, //좋아요
                    attributes: ["id", "nick"],
                    as: "Likings",
                },
            ],
        })
            .then((user) => done(null, user)) 
            .catch((err) => done(err));
    });

    local();
    kakao();
};

models/post.js

static associate(db) {
        db.Post.belongsTo(db.User);
        db.Post.belongsToMany(db.HashTag, { through: "PostHashtag" });
        //좋아요 한 사람
        db.Post.belongsToMany(db.User, {
            foreignKey: "likePostList",
            as: "Likeds",
            through: "likeList",
        });
    }
}

models/user.js

    static associate(db) {
        db.User.hasMany(db.Post);
        db.User.belongsToMany(db.User, {
            //팔로워
            foreignKey: "followingId",
            as: "Followers", 
            through: "Follow",
        });


        db.User.belongsToMany(db.User, {
            //팔로잉
            foreignKey: "follwersId",
            as: "Followings",
            through: "Follow", //db.sequelize.models.Follow로 접근 가능
        });


        db.User.belongsToMany(db.Post, {
            //좋아요 한 게시글 리스트
            foreignKey: "likeIdList",
            as: "Likings",
            through: "likeList",
        });
    }

혹시 몰라서 코드 남깁니다....

 

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

User랑 Post간에 Likings여야하는데 User랑 User에 Likings 하셨습니다

신민규님의 프로필 이미지
신민규
질문자

어이쿠,,감사합니다.

이런 질문 하나하나 다 답변 달아주셔서 고생하십니다 감사합니다

신민규님의 프로필 이미지
신민규

작성한 질문수

질문하기