inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[리뉴얼] React로 NodeBird SNS 만들기

swr 사용해보기

reduxSaga로는 되는데 SWR로 바꾸면 에러가 나요

211

foxbox r

작성한 질문수 4

0

profil.js

import React,{useEffect} from 'react';
import AppLayout from "../components/AppLayout"
import NicknameEditForm from "../components/NicknameEditForm"
import FollowList from "../components/FollowList"
import {useSelector,useDispatch} from "react-redux"
import {LOAD_FOLLOWERS_REQUEST,LOAD_FOLLOWINGS_REQUEST} from "../reducers/userReducer"

import Head from "next/head"
import {useRouter} from "next/router"

import {END} from "redux-saga"
import axios from "axios";
import wrapper from "../store/configureStore"
import {LOAD_MY_INFO_REQUEST} from "../reducers/userReducer"
import useSWR from "swr";
import {backAddress} from "../back"

const fetcher = (url)=>axios.get(url,{withCredentials:true}).then(result=>result.data);

function Profile(){
    const dispatch = useDispatch();
    const router = useRouter();
    const {me} = useSelector(state=>state.userReducer);

    const {data:followersData,error:followerError} = useSWR(`${backAddress}/user/followers`,fetcher);
    const {data:followingsData,error:followingError} = useSWR(`${backAddress}/user/followings`,fetcher);


    useEffect(()=>{
        if(!me) {
            router.push('/');
        }
    },[me])
    
    // useEffect(()=>{
    //     dispatch({
    //         type:LOAD_FOLLOWERS_REQUEST
    //     })
    //     dispatch({
    //         type:LOAD_FOLLOWINGS_REQUEST
    //     })
    // },[])

    // return 이 hooks(use...())보다 위에 있을수 없음 
    
    if(!me) return null;

    if(followerError || followingError){
        console.error(followerError || followingError);
        return <div>팔로잉/팔로워 로딩 중 에러가 발생함</div>;
    }

    
    return (
        <>
            <Head>
                <title>profile</title>
            </Head>
            <AppLayout>
                <NicknameEditForm />
                <FollowList header="팔로잉 목록" data={followingsData} />
                <FollowList header="팔로워 목록" data={followersData} />
            </AppLayout>
        </>
    )
}

export const getServerSideProps = wrapper.getServerSideProps(async (context)=>{
    const cookie = context.req ? context.req.headers.cookie : "";
    axios.defaults.headers.Cookie = "";
    if(context.req && cookie){
        axios.defaults.headers.Cookie = cookie; // 쿠키 넣기
    }
    context.store.dispatch({
        type:LOAD_MY_INFO_REQUEST,
    })

    context.store.dispatch(END); // 사용법 request success 기다리기
    await context.store.sagaTask.toPromise(); // 사용법 configureStore.js 에서 등록한 sgagTask 를 사용
});


export default Profile;

routes/user.js

router.get("/followers",isLoggedIn,async (req,res,next)=>{
    try{
        const me = await User.findOne({where:{id:req.user.id}});
        if(!me){
            res.status(403).send("me 없음")
        }
        const followers = await me.getFollowers(
            {
                limit:2,
            }
        );
        res.status(200).json(followers)
    } catch(error){
        console.error(error);
        next(error);
    }
})

router.get("/followings",isLoggedIn,async (req,res,next)=>{
    try{
        
        const me = await User.findOne({where:{id:15||req.user.id}})

        if(!me){
            res.status(403).send("me 없음")
        }
        const getFollowings = await me.getFollowings(
            {
                limit:2,
            }
        );
        res.status(200).json(getFollowings)
    } catch(error){
        console.error(error);
        next(error);
    }
})

Error

  sql: 'SELECT `User`.`id`, `User`.`email`, `User`.`nickname`, `User`.`createdAt`, `User`.`updatedAt`, `Posts`.`id` AS `Posts.id`, `Followings`.`id` AS `Followings.id`, `Followings->Follow`.`createdAt` AS `Followings.Follow.createdAt`, `Followings->Follow`.`updatedAt` AS `Followings.Follow.updatedAt`, `Followings->Follow`.`FollowingId` AS `Followings.Follow.FollowingId`, `Followings->Follow`.`FollowerId` AS `Followings.Follow.FollowerId`, `Followers`.`id` AS `Followers.id`, `Followers->Follow`.`createdAt` AS `Followers.Follow.createdAt`, `Followers->Follow`.`updatedAt` AS `Followers.Follow.updatedAt`, `Followers->Follow`.`FollowingId` AS `Followers.Follow.FollowingId`, `Followers->Follow`.`FollowerId` AS `Followers.Follow.FollowerId` FROM `Users` AS `User` LEFT OUTER JOIN `Posts` AS `Posts` ON `User`.`id` = `Posts`.`UserId` LEFT OUTER JOIN ( `Follow` AS `Followings->Follow` INNER JOIN `Users` AS `Followings` ON `Followings`.`id` = `Followings->Follow`.`FollowingId`) ON `User`.`id` = `Followings->Follow`.`FollowerId` LEFT OUTER JOIN ( `Follow` AS 
`Followers->Follow` INNER JOIN `Users` AS `Followers` ON `Followers`.`id` = `Followers->Follow`.`FollowerId`) ON `User`.`id` = `Followers->Follow`.`FollowingId` WHERE `User`.`id` = NaN;',
  parameters: undefined
}
SequelizeDatabaseError: Unknown column 'NaN' in 'where clause'
    at Query.formatError (C:\WEB\full\back\node_modules\sequelize\lib\dialects\mysql\query.js:239:16)
    at Query.run (C:\WEB\full\back\node_modules\sequelize\lib\dialects\mysql\query.js:54:18)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
GET /user/followers 500 27.011 ms - 511

리덕스사가로 바꿔서 실행하면 잘 작동하는데  swr로 바꾸면 sql문에 nan값이 들어갑니다. 제가 잘못한 부분이 어디인가요?

swr express nodejs redux react Next.js

답변 1

0

제로초(조현영)

SQL 부분을 보시면 req.user.id가 NaN이네요. console.log(req.user)해보세요. 만약 undefined나 null이라면 로그인이 되어있지 않은 상황이라고 판단됩니다.

넥스트 버젼 질문

0

89

2

로그인시 401 Unauthorized 오류가 뜹니다

0

102

1

무한 스크롤 중 스크롤 튐 현상

0

186

1

특정 페이지 접근을 막고 싶을 때

0

114

2

createGlobalStyle의 위치와 영향범위

0

101

2

인라인 스타일 리렌더링 관련

0

95

2

vsc 에서 npm init 설치시 오류

0

154

2

nextjs 15버전 사용 가능할까요?

0

164

1

화면 새로고침 문의

0

128

1

RTK에서 draft, state 차이가 있나요?

0

158

2

Next 14 사용해도 될까요?

0

455

1

next, node 버전 / 폴더 구조 질문 드립니다.

0

354

1

url 오류 질문있습니다

0

214

1

ssh xxxxx로 우분투에 들어가려니까 port 22: Connection timed out

0

388

1

sudo certbot --nginx 에러

0

1288

2

Minified React error 콘솔에러 (hydrate)

0

476

1

카카오 공유했을 때 이전에 작성했던 글이 나오는 버그

0

253

1

프론트서버 배포 후 EADDRINUSE에러 발생

0

332

1

npm run build 에러

0

525

1

front 서버 npm run build 중에 발생한 에러들

0

395

1

서버 실행하고 브라우저로 들어갔을때 404에러

0

349

2

css 서버사이드 랜더링이 적용되지 않아서 문의 드립니다.

0

290

1

팔로워 3명씩 불러오고 데이터 합쳐주는걸로 바꾸고 서버요청을 무한으로하고있습니다.

0

247

2

해시태그 검색에서 throttle에 관해 질문있습니다.

0

205

1