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

KY lee님의 프로필 이미지
KY lee

작성한 질문수

Node.js 교과서 - 기본부터 프로젝트 실습까지

passport serializeUser/deserializeUser

에러에 대한 질문입니다.

작성

·

568

0

User.find is not a function

TypeError: User.find is not a function
    at D:\_Node.js\_NodeStudy_inflearn\Node-Study\NodeSNS\nodebird\routes\auth.js:13:35
    at Layer.handle [as handle_request] (D:\_Node.js\_NodeStudy_inflearn\Node-Study\NodeSNS\nodebird\node_modules\express\lib\router\layer.js:95:5)
    at next (D:\_Node.js\_NodeStudy_inflearn\Node-Study\NodeSNS\nodebird\node_modules\express\lib\router\route.js:137:13)
    at exports.isNotLoggedIn (D:\_Node.js\_NodeStudy_inflearn\Node-Study\NodeSNS\nodebird\routes\middlewares.js:14:9)
    at Layer.handle [as handle_request] (D:\_Node.js\_NodeStudy_inflearn\Node-Study\NodeSNS\nodebird\node_modules\express\lib\router\layer.js:95:5)
    at next (D:\_Node.js\_NodeStudy_inflearn\Node-Study\NodeSNS\nodebird\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (D:\_Node.js\_NodeStudy_inflearn\Node-Study\NodeSNS\nodebird\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (D:\_Node.js\_NodeStudy_inflearn\Node-Study\NodeSNS\nodebird\node_modules\express\lib\router\layer.js:95:5)
    at D:\_Node.js\_NodeStudy_inflearn\Node-Study\NodeSNS\nodebird\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (D:\_Node.js\_NodeStudy_inflearn\Node-Study\NodeSNS\nodebird\node_modules\express\lib\router\index.js:335:12)
    at next (D:\_Node.js\_NodeStudy_inflearn\Node-Study\NodeSNS\nodebird\node_modules\express\lib\router\index.js:275:10)
    at Function.handle (D:\_Node.js\_NodeStudy_inflearn\Node-Study\NodeSNS\nodebird\node_modules\express\lib\router\index.js:174:3)
    at router (D:\_Node.js\_NodeStudy_inflearn\Node-Study\NodeSNS\nodebird\node_modules\express\lib\router\index.js:47:12)
    at Layer.handle [as handle_request] (D:\_Node.js\_NodeStudy_inflearn\Node-Study\NodeSNS\nodebird\node_modules\express\lib\router\layer.js:95:5)
    at trim_prefix (D:\_Node.js\_NodeStudy_inflearn\Node-Study\NodeSNS\nodebird\node_modules\express\lib\router\index.js:317:13)
    at D:\_Node.js\_NodeStudy_inflearn\Node-Study\NodeSNS\nodebird\node_modules\express\lib\router\index.js:284:7
    at Function.process_params (D:\_Node.js\_NodeStudy_inflearn\Node-Study\NodeSNS\nodebird\node_modules\express\lib\router\index.js:335:12)
    at next (D:\_Node.js\_NodeStudy_inflearn\Node-Study\NodeSNS\nodebird\node_modules\express\lib\router\index.js:275:10)
    at D:\_Node.js\_NodeStudy_inflearn\Node-Study\NodeSNS\nodebird\node_modules\express\lib\router\index.js:635:15
    at next (D:\_Node.js\_NodeStudy_inflearn\Node-Study\NodeSNS\nodebird\node_modules\express\lib\router\index.js:260:14)
    at Function.handle (D:\_Node.js\_NodeStudy_inflearn\Node-Study\NodeSNS\nodebird\node_modules\express\lib\router\index.js:174:3)
    at router (D:\_Node.js\_NodeStudy_inflearn\Node-Study\NodeSNS\nodebird\node_modules\express\lib\router\index.js:47:12)

오류가 이렇게 나옵니다...

하지만 저는 auth.js 설정이 되어있습니다.

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

const router = express.Router();

// POST /auth/join (회원가입)
router.post('/join', isNotLoggedIn, async (req, res, next) => {
    const { email, nick, password} = req.body;
    try {
        const exUser = await User.find({ where: { email } });
        if (exUser) {
            req.flash('joinError', '이미 가입된 이메일입니다.');
            return res.redirect('/join');
          }
        // console.time('암호화 시간');
        const hash = await bcrypt.hash(password, 17);
        // console.timeEnd('암호화 시간');
        await User.create({
            email,
            nick,
            password: hash,
        });
        return res.redirect('/');
    } catch (error) {
        console.error(error);
        next(error);
    }

})


models/user.js도 이렇게 설정이 되어있습니다.

// 사용자 테이블
module.exports = ( (sequelize, DataTypes) => (
    sequelize.define('user', {
        email : {
            type: DataTypes.STRING(40),
            allowNull: true,
            unique: true,
        },
        nick : {
            type: DataTypes.STRING(15),
            allowNull: false,
        },
        password: {
            type: DataTypes.STRING(100),
            allowNull: true, // 카카오 로그인 위해서 true를 해준다. 나중에 데이터베이스 확인할 것.
        },
        // provider는 local과 kakao 구분하기 위해서
        provider: {
            type:DataTypes.STRING(10),
            allowNull: false,
            defaultValue: 'local',
        },
        snsID: {
            type: DataTypes.STRING(30),
            allowNull: true,
        }
    }, {
        timestamps : true,
        paranoid : true,
    })
));


제대로 적었다고 생각했었는데 User.find 가 없다고 하네요 .
참고로 회원가입할 때 생기는 오류입니다.

깃허브 필요하시면 첨부해드릴게요!!

답변 7

1

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

해당 파일 최상단에요. require하는 방법은 아시죠?

0

아 블로그 정오표에 다 해놓으셨넹 ㅎㅎ;

0

아 이거 find()가 아니라 findOne() 해야되네유~! 제로초님 이거 소스 수정하실 때 참고하세유ㅎ

0

KY lee님 이거 어떻게 해결하셨나요..?

저도 똑같은 에러인데 잘 안되네요ㅠ

0

KY lee님의 프로필 이미지
KY lee
질문자

해결했습니다!! 감사합니다!!!

0

KY lee님의 프로필 이미지
KY lee
질문자

제가 이해를 못해서 그러는데 어디에 하면 될까요?? 죄송합니다...

0

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

db.User로 바꿔보세요.

db나 User를 require하셔야합니다.

KY lee님의 프로필 이미지
KY lee

작성한 질문수

질문하기