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

ㅇㅇ님의 프로필 이미지
ㅇㅇ

작성한 질문수

React로 NodeBird SNS 만들기

5-14. include와 as, foreignKey

에러 질문있습니다.

작성

·

215

0

<Card
      actions={[
        <div key="twit">
          짹짹
          {me.Post.length}
        </div>
      ]}
    >

얘네들 추가하기 전까지는 오류없이 잘 되는데 추가하고 나서는 위 사진처럼 저런 에러들이 뜨네요....

아무리 찾아봐도 뭐가 문제인지 모르겠어서 질문남깁니다.

답변 5

1

{me.Post.length}

이 부분에서 Posts s빠진 것 아닌가요

1

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

passport.deserializeUser 부분이 제 코드와 다른 것 같습니다. Post 모델을 include 해주셔야 합니다

0

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

소스코드 전체 흐름을 모르면 저도 에러 잡기가 어렵습니다. 혹시나 catch 부분에 console.error(err)가 빠져있는 부분이 있으면 넣고 실행하셔야 에러가 뜹니다.

0

ㅇㅇ님의 프로필 이미지
ㅇㅇ
질문자

리듀에서에서 me: action.data를 하면 데이터가 안들어 오는 것 같습니다.

dummy데이터를 넣으면 잘 작동하는데.......

코드 똑같이 쳤는데 어느 부분이 잘못된건지 모르겠네요..

0

ㅇㅇ님의 프로필 이미지
ㅇㅇ
질문자

routes/user.js 코드

const express = require("express");
const db = require("../models");
const bcrypt = require("bcrypt");
const passport = require("passport");

const Router = express.Router();

Router.get("/", (req, res) => {});

Router.post("/", async (req, res, next) => {
  try {
    const exUser = await db.User.findOne({
      where: { userId: req.body.userId }
    });
    if (exUser) {
      return res.status(403).send("이미 사용 중인 아이디입니다.");
    }
    const hashedPassword = await bcrypt.hash(req.body.password, 12);
    const newUser = db.User.create({
      userId: req.body.userId,
      nickname: req.body.nickname,
      password: hashedPassword
    });
    console.log(newUser);
    return res.status(200).json(newUser);
  } catch (e) {
    console.error(e);
    return next(e);
  }
});

Router.post("/logout", (req, res) => {
  req.logout();
  req.session.destroy();
  res.send("로그아웃 성공");
});

Router.post("/login", (req, res, next) => {
  // POST /api/user/login
  passport.authenticate("local", (err, user, info) => {
    if (err) {
      console.error(err);
      return next(err);
    }
    if (info) {
      return res.status(401).send(info.reason);
    }
    return req.login(user, async loginErr => {
      try {
        if (loginErr) {
          return next(loginErr);
        }
        const fullUser = await db.User.findOne({
          where: { id: user.id },
          include: [
            {
              model: db.Post,
              as: "Posts",
              attributes: ["id"]
            },
            {
              model: db.User,
              as: "Followings",
              attributes: ["id"]
            },
            {
              model: db.User,
              as: "Followers",
              attributes: ["id"]
            }
          ],
          attributes: ["id", "nickname", "userId"]
        });
        console.log(fullUser);
        return res.json(fullUser);
      } catch (e) {
        next(e);
      }
    });
  })(req, res, next);
});

module.exports = Router;

passport/index.js 코드입니다.

const passport = require("passport");
const db = require("../models");
const local = require("./local");

module.exports = () => {
  passport.serializeUser((user, done) => {
    return done(null, user.id);
  });

  passport.deserializeUser(async (id, done) => {
    try {
      const user = await db.User.findOne({
        where: { id },
        include: [
          {
            model: db.Post,
            as: "Posts",
            attributes: ["id"]
          },
          {
            model: db.User,
            as: "Followings",
            attributes: ["id"]
          },
          {
            model: db.User,
            as: "Followers",
            attributes: ["id"]
          }
        ]
      });
      return done(null, user); // req.user
    } catch (e) {
      console.error(e);
      return done(e);
    }
  });

  local();
};

어디가 잘못된걸까요?? 깃헙에서 붙여넣기를 했는데도 똑같이 에러가 뜹니다...

찾아보려해도 잘 모르겠습니다...

ㅇㅇ님의 프로필 이미지
ㅇㅇ

작성한 질문수

질문하기