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

learn님의 프로필 이미지
learn

작성한 질문수

React로 NodeBird SNS 만들기

back에서 자꾸 userId를 읽을 수 없다고 뜨는데 왜 그런가요?

작성

·

240

0

프론트에서 로그인하면 SUCCESS까지 뜨는데 back에서는 DB에 사용자가 추가되지 않았어요 이렇게 에러가 떠서 뭐가 잘못된 걸까요? 

ragas/userex.js

function* signUpAPI(signUpData) {
    //서버에 요청을 보내는 부분 
    return axios.post('http://localhost:3065/api/user/'signUpData);
    // return axios.post('/login');
}
function* signUp(action) {
    try {
        //call은 동기 호출 응답받을 때까지 기다림
        // yield delay(2000);

        yield call(signUpAPIaction.data);
        // throw new Error('에러에러에러');
        yield put({
            //put은 dispatch랑 동일
            type: SIGN_UP_SUCCESS
        });
    } catch (e) {
        //loginAPI 실패 
        console.error(e);
        yield put({
            type: SIGN_UP_FAILURE,
            error: e,
        })
    }
}


function* watchSignUp() {
    yield takeEvery(SIGN_UP_REQUESTsignUp);
    // yield delay(2000);
    //리스너 역할
    // 비동기 요청, 타이머 넣어도 되고 
}
pages/signup.js에 있는 onSubmit 함수
    const onSubmit = useCallback((e=> {
        e.preventDefault();
        if (password !== passwordCheck) {
            return setPasswordError(true);
        }
        if (!term) {
            return setTermError(true);
        }
        if (!agree) {
            return setAgreeError(true);
        }
        // dispatch(signUpAction({
        //     userId: id,
        //     userPassword: password,
        //     userName: name,
        //     // major,

        // }));
        return dispatch({
            type: SIGN_UP_REQUEST,
            data: {
                userId: id,
                userPassword: password
                userName: name,
            },
        });

        // console.log({
        //     id, name, birth, entergrade, major, nowstate, password, passwordCheck, term, agree
        // });
    }, [idnamepasswordpasswordChecktermagree]);
reducers/userex.js에서 SIGNUP 부분
        case SIGN_UP_REQUEST: {
            return {
                ...state,
                isSigningUp: true,
                isSignedUp: false,
                signUpErrorReason: '',
            }
        }
        case SIGN_UP_SUCCESS: {
            return {
                ...state,
                isSigningUp: false,
                isSignedUp: true,
            }
        }
        case SIGN_UP_FAILURE: {
            return {
                ...state,
                isSigningUp: false,
                signUpErrorReason: action.error,
            }
       }

답변 7

0

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

db.sequelize.sync().catch(console.error)으로 한 번 바꿔보세요. 이 이외에는 에러날 곳은 없어보입니다.

0

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

const express = require('express');
const morgan = require('morgan');
const cors = require('cors');

const db = require('./models');
const userAPIRouter = require('./routes/user');
const plannerAPIRouter = require('./routes/planner');

const app = express();
db.sequelize.sync();    //알아서 테이블 생성 

app.use(morgan('dev')); //미들웨어 

app.use(express.json());
app.use(express.urlencoded({extended: true}));
app.use(cors());

//API는 다른 서비스가 내 서비스의 기능을 실행할 수 있게 열어둔 창구 
app.use('/api/user'userAPIRouter);
app.use('/api/planner'plannerAPIRouter);

app.get('/', (reqres=> {
    res.send('Hello, server');
});
app.get('/about', (reqres=> {
    res.send('Hello, about');
});

app.listen(3065, () => {
    console.log(`server is running on localhost:3065`);
});
이렇게 되어 있는데 router는 빼먹은 건가요?

0

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

혹시 router(app.use(주소, router))가 app.use보다 더 위에 연결되어 있나요? express.json과 urlencoded가 더 위에 있어야 합니다.

0

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

back/index.js에
app.use(express.json());
app.use(express.urlencoded({extended: true}));
이부분은 넣어져있는데 다른 부분도 살펴봐야되나요?

0

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

req.body가 undefined라면 express.json이나 express.urlencoded 미들웨어를 넣지 않으신 것 같습니다.

0

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

const express = require('express');
const bcrypt = require('bcrypt');
const passport = require('passport');
const db = require('../models');    //db안에 User를 연결해놨기 때문에 쓸 수 있음 
const router = express.Router();

router.get('/', (reqres=> { //사용자 정보를 가져옴 

});
router.post('/'async (resreqnext=> {    //POST/api/user 회원가입 사용자 등록 
    //요청에 헤더, 본문을 같이 보낼 수 있음 
    //본문에 데이터를 넣어서 보냄 
    try {
        const exUser = await db.User.findOne({
            where: {
                userId: req.body.userId,
            },
        });
        if (exUser) {
            //400~599
            return res.status(403).send('이미 사용중인 아이디입니다.');
            //send는 문자열을 보냄 
        }
        const hashedPassword = await bcrypt.hash(req.body.userPassword12);
        const newUser = await db.User.create({
            userName: req.body.userName,
            userId: req.body.userId,
            userPassword: hashedPassword,
        });
        console.log(newUser);
        return res.status(200).json(newUser);
    } catch (e) {
        console.error(e);
        // return res.status(403).send(e);
        //에러처리 후 
        return next(e);
    }
});

router.get('/:id', (reqres=> {    //남의 정보 가져오는 것 ex) /3

})

router.post('/logout', (resreq=> {

});

router.post('/login', (resreq=> {

});
router.get('/:id/follow', (reqres=> {

});
router.post('/:id/follow', (reqres=> {

});
router.delete('/:id/follow', (reqres=> {

});
router.post('/:id/follower', (reqres=> {

});

module.exports = router;
routes/user.js는 이렇게 적었습니다!

0

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

back에서 routes/user.js를 보여주셔야 합니다.

learn님의 프로필 이미지
learn

작성한 질문수

질문하기