• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

프로필 리스트 구현중에 limit을 설정하면 에러가 발생해서여

21.03.01 17:35 작성 조회수 235

0

안녕하세여  

프로필 리스트 출력 구현중에  라우터에서 팔로우 정보를 가져오는 부분에   limit을 설정하면 에러가 발생해서여 

limit을 설정하면 
ex)

        const followers = await user.getFollowers({
            attributes: ['id', 'nickname'],
            limit: parseInt("3", 10),
        });

아래처럼 id가 없다는 에러가 발생하는데이유를 모르겠어요 그전까지 없던 에러가 갑자기 발생하는데  에러 메세지를 봐도 어느 코드에서 에러가 발생했는지 잘 못찼겠어서 에러화면과 github 레포지터리 url을 첨부 하였습니다. 한번 봐주시면 감사여 

그리고 두번째 질문은  pages/index.js에서 로그인 유저 정보를 불러왔어도  프로필 페이지에서 서버 사이드 렌더링으로 다시 서버 사이드 렌더링으로 로그인 유저 정보를 불러와야 되나여? 페이지 이동시에 state가 유직 안되는건가여?

알려주시면 감사여 ~!

git:

라우터:
back/routes/user.js

프로필 페이지:
front/pages/profile.js

팔로우 리스트 컴퍼넌트:
front/components/FollowList.js

답변 6

·

답변을 작성해보세요.

1

다운로드 해서 디버깅해드릴 수는 없습니다. 어딘가에 오타일 것 같은데요. 진짜로 limit 부분만 빼면 제대로 동작하고, limit만 추가하면 에러가 발생하나요? 그러진 않을 것 같습니다. 모델 쪽은 문제 없고 라우터랑 프론트쪽만 보시면 될 것 같습니다.

1

req.user가 undefined인 것으로 봐서는 로그인이 안되었거나 쿠키가 전달안 된 것 같은데요.

프로필 페이지에서도 사용자정보 ssr로 가져와야합니다.

0

terecal님의 프로필

terecal

질문자

2021.03.01

pages/index.js 코드를 복붙해서 해결하긴 했는데 뭐가 달라진건지 모르겠;; 

아무튼 오타라는 힌트를 주셔서 문제를 해결할수 있었습니다 감사합니다 !

0

terecal님의 프로필

terecal

질문자

2021.03.01

첫페이지에서 로그인 하고 프로필 버튼을 처음 누를때는 잘 출력되는데 한번더 누르면 로그인이 필요하데요 쿠키가 문제인가봐여 그러 서버 사이드 렌더링 부분이나 라우터 로직에서 뭔가 오타가 있나봐여 한번 잘 찾아볼게여 감사합니다  

0

terecal님의 프로필

terecal

질문자

2021.03.01

몇번을 다시 테스트 해봐도 limit을 걸기전에는 프로필 페이지가 잘 출력되여 

일단 오타가 제일 의심되는것도 사실이라  잘찾아보겠습니다 감사합니다 

0

terecal님의 프로필

terecal

질문자

2021.03.01

네 req.user.id가 없나봐여 그런데  pages/index.js와 다르지 않은데 왜 여기서는 로그인 유지가 안되는걸까여 그리고  limit 설정을 걸기전에는 로그인 유지와 팔로우 리스트 출력이 잘되여 무엇이 문제인것일까여? ㅋㅋ;;

라우터 순서가 문제일수도 있을것 같아 제일 위로 올리고 limit을 그대로 limit: 3 이렇게도 해봤는데 잘안되더라구여 ㅋㅋ;; ㅈㅅ한데 git에서 다운받아 디버깅을 좀 해주시면 안될까여 ㅋㅋ;;;;;

혹시 모델쪽이 잘못된것일수도 있을까여 릴레이션 관계를 잘못 적었거나 아래 모델에서 뭔가 설정값이 잘못들어간것일까여 ??

module.exports = (sequelize, DataTypes) => {
    // 아래처럼 User 객체를 생성하면 실제 디비상에서 유저 테이블로 매핑되며 email, nickname, password 필드가 자동 생성
    const User = sequelize.define('User', {
        // id는 테이블이 생성될때 기본적으로 설정되므로 코드로 필드 설정을 할필요 없다
        email: {
            type: DataTypes.STRING(30), // STRING, TEXT, BOOLEAN, INTEGER, FLOAT, DATETIME 등의 필드 타입이 존재
            allowNull: false, // 필수
            unique: true, // 고유한 값
        },
        nickname: {
            type: DataTypes.STRING(30),
            allowNull: false, // 필수
        },
        password: {
            type: DataTypes.STRING(100),
            allowNull: false, // 필수
        },
    }, {
        charset: 'utf8',
        collate: 'utf8_general_ci', // 한글 저장
    });

    User.associate = (db) => {
        // User: Post => 1: n => db.User.hasMany(db.Post);
        db.User.hasMany(db.Post);
        // User: Comment => 1: n => db.User.hasMany(db.Comment);
        db.User.hasMany(db.Comment);
        // User: Post => m:n(through: 'Like') => User 가 좋아요 누른 게시글들  as Liked
        db.User.belongsToMany(db.Post, { through: 'Like', as: 'Liked' })

        // User : User => self(through: 'Follow') => user가 팔로우 하는 사람 as: 'Followers' user를 팔로잉 하는 사람 as: 'Followings'
        db.User.belongsToMany(db.User, { through: 'Follow', as: 'Followers', foreignKey: 'FollowingId' });
        db.User.belongsToMany(db.User, { through: 'Follow', as: 'Followings', foreignKey: 'FollowerId' });
    };

    return User;

};