강의

멘토링

커뮤니티

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

이원영님의 프로필 이미지
이원영

작성한 질문수

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

백엔드 회원가입 구현 중 에러

작성

·

484

0

[제로초 강좌 질문 필독 사항입니다]
질문에는 여러분에게 도움이 되는 질문과 도움이 되지 않는 질문이 있습니다.
도움이 되는 질문을 하는 방법을 알려드립니다.

다음과 같이 db연결은 잘되어 있는데, ,회원가입을 누르면 이런 오류가 백에서 뜹니다.

그리고 브라우저 창 경고 메세지에서는 이러한 경고 메세지가 뜹니다.

개발자 도구 네트워크 창에는 이런 에러가 뜹니다.

 

  • type(pin):"SIGN_UP_FAILURE"

  • error(pin):"<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Error</title> </head> <body> <pre>Error: WHERE parameter &quot;email&quot; has invalid &quot;undefined&quot; value<br> &nbsp; &nbsp;at MySQLQueryGenerator.whereItemQuery (C:\Users\user\VscodeProjects\react-nodebird-master\prepare\back\node_modules\sequelize\lib\dialects\abstract\query-generator.js:1693:13)<br> &nbsp; &nbsp;at C:\Users\user\VscodeProjects\react-nodebird-master\prepare\back\node_modules\sequelize\lib\dialects\abstract\query-generator.js:1684:25<br> &nbsp; &nbsp;at Array.forEach (&lt;anonymous&gt;)<br> &nbsp; &nbsp;at MySQLQueryGenerator.whereItemsQuery (C:\Users\user\VscodeProjects\react-nodebird-master\prepare\back\node_modules\sequelize\lib\dialects\abstract\query-generator.js:1682:35)<br> &nbsp; &nbsp;at MySQLQueryGenerator.getWhereConditions (C:\Users\user\VscodeProjects\react-nodebird-master\prepare\back\node_modules\sequelize\lib\dialects\abstract\query-generator.js:2025:19)<br> &nbsp; &nbsp;at MySQLQueryGenerator.selectQuery (C:\Users\user\VscodeProjects\react-nodebird-master\prepare\back\node_modules\sequelize\lib\dialects\abstract\query-generator.js:954:28)<br> &nbsp; &nbsp;at MySQLQueryInterface.select (C:\Users\user\VscodeProjects\react-nodebird-master\prepare\back\node_modules\sequelize\lib\dialects\abstract\query-interface.js:407:59)<br> &nbsp; &nbsp;at Function.findAll (C:\Users\user\VscodeProjects\react-nodebird-master\prepare\back\node_modules\sequelize\lib\model.js:1134:47)<br> &nbsp; &nbsp;at processTicksAndRejections (node:internal/process/task_queues:96:5)<br> &nbsp; &nbsp;at async Function.findOne (C:\Users\user\VscodeProjects\react-nodebird-master\prepare\back\node_modules\sequelize\lib\model.js:1228:12)</pre> </body> </html> "

 

 

코드는 어떤 부분에서 오류가 발생했는지 잘 모르겠어서 첨부하지 못했습니다. ㅠㅠ

어떤 부분에서 오류가 발생했는지 알려주시면 감사하겠습니다!!!

답변 1

0

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

서버로 email이 전달되지 않고 있는 겁니다. 네트워크탭에서 payload 탭에 email 있나 확인해보세요.

이원영님의 프로필 이미지
이원영
질문자

image페이로드에 이메일이 있는거 같습니다!!

어디가 문제일까요 ㅜㅜ

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

그럼 서버에서 받는 부분이 문제입니다.

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

유저 라우터 코드 올려보세요.

이원영님의 프로필 이미지
이원영
질문자

const express = require('express');
const bcrypt =require('bcrypt');
const passport = require('passport');

const { User, Post } = require('../models');
const { isLoggedIn, isNotLoggedIn } = require('./middlewares');

const router = express.Router();

router.post('/login',isNotLoggedIn, (req, res, next) => {
  passport.authenticate('local', (err, user, info) => {
    if (err) {
      console.error(err); //에러 확인
      return next(err);
    }
    if (info) {
      return res.status(401).send(info.reason); //401은 허가되지 않음
    }
    return req.login(user, async (loginErr) => {
      if (loginErr) {
        console.error(loginErr);
        return next(loginErr);
      }
      //res.setHeader('Cookie', 'cslhy')
      const fullUserWithoutPassword = await User.findOne({ //fullUser는 모든정보들을 다 집어넣은 유저
        where: {id:user.id},
        attributes:{
          exclude: ['password']
        }, //비밀번호만 빼고 가져오겠다.
        include: [{ //내가 쓴 게시글
          model: Post,
        }, { //팔로잉
          model: User,
          as: 'Followings',
        },{ //팔로워
          model: User,
          as: 'Followers',
        }]
      })
      return res.status(200).json(fullUserWithoutPassword); //사용자 정보를 프런트로 넘겨준다.
    });
  })(req, res, next);
}); //POST /user/login

router.post('/', isNotLoggedIn, async (req, res, next) => { // POST /user/
  try{
    const exUser = await User.findOne({
      where: { //조건
        email: req.body.eamil,
      }
    });
    if (exUser) {
      return res.status(403).send('이미 사용중인 아이디입니다.');
    }
    const hashedPassword = await bcrypt.hash(req.body.password, 12); //13은 보안 강도 -> 컴퓨터 성능에 따라
    await User.create({
      email: req.body.email,
      nickname: req.body.nickname,
      password: hashedPassword,
    });
    res.status(200).send('ok'); //200 생략가능 but 써라
  } catch(error) {
    console.error(error);
    next(error); // status 500
  }
});

//로그아웃 라우터 - 세션 지우기, 쿠키 지우기
router.post('/logout', isLoggedIn, (req, res) => {
  req.logout();
  req.session.destroy();
  res.send('ok');
});

module.exports = router;

 

routes/user.js 파일입니다!

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

여기서 req.body.email이 undefined라는 뜻인데요. 이게 언디파인드려면 app.js가 잘못되었을 겁니다. 그것도 올려주세요.

이원영님의 프로필 이미지
이원영
질문자

const express = require('express');
const cors = require('cors');
const session = require('express-session');
const cookieParser = require('cookie-parser');
const passport = require('passport');
const dotenv = require('dotenv');

const postRouter = require('./routes/post');
const userRouter = require('./routes/user');
const db = require('./models');
const passportConfig = require('./passport');

dotenv.config();
const app = express();
db.sequelize.sync()
  .then(() => {
    console.log('db 연결 성공');
  })
  .catch(console.error);
passportConfig();

app.use(cors({
  origin: '*',
  credentials: false,
})); //cors에러를 해결하기 위해서
app.use(express.json());
app.use(express.urlencoded({extended: true}));
app.use(cookieParser(process.env.COOKIE_SECRET));
app.use(session({
  saveUninitialized: false,
  resave: false,
  secret: process.env.COOKIE_SECRET,
}));
app.use(passport.initialize());
app.use(passport.session());
 
app.get('/', (req, res) => {
  res.send('hello express');
});

app.get('/', (req, res) => {
  res.send('hello api');
});

app.get('/posts', (req, res) => {
  res.json([
    { id:1, content: 'hello'},
    { id:2, content: 'hello2'},
    { id:3, content: 'hello3'},
  ]);
});

app.use('/post', postRouter);
app.use('/user', userRouter);

app.listen(3065, () => {
  console.log('서버 실행 중');
});

아 네! app.js 파일입니다!

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

아, 지금 보니 email: req.body.eamil 로 되어있네요 ㅎㅎㅎ 오타네요 제가 문제를 해결한 과정을 잘 기억하세요.

이원영님의 프로필 이미지
이원영
질문자

아 오타였네요..! 감사합니다! 다른 오류가 생겼을때도 에러 메세지 보면서 알려주신대로 문제 해결해보도록 노력하겠습니다!!

이원영님의 프로필 이미지
이원영

작성한 질문수

질문하기