user.controller.js 4.3 KB
Newer Older
우지원's avatar
우지원 committed
1
2
import User from "../models/User.js"
import isLength from 'validator/lib/isLength.js'
우지원's avatar
01_06    
우지원 committed
3
import isEmail from 'validator/lib/isEmail.js'
JeongYeonwoo's avatar
   
JeongYeonwoo committed
4
5
6
import bcrypt from "bcryptjs";
import jwt from 'jsonwebtoken'
import config from "../config.js"
우지원's avatar
우지원 committed
7
8
9
10
//꼭 js붙여주기!!

//sign validation해야됨
const signup = async (req, res) => {
우지원's avatar
a    
우지원 committed
11
12

    const { username, nickname, email, password } = req.body
우지원's avatar
우지원 committed
13
    //req.body를 구조분해하여 각각 보이게함 -> 모든정보들이 한줄에 보임
우지원's avatar
a    
우지원 committed
14
    console.log(username, nickname, email, password)
우지원's avatar
우지원 committed
15
16

    try {
JeongYeonwoo's avatar
JeongYeonwoo committed
17
        if (!isLength(username, { min: 3, max: 10 })) {
우지원's avatar
우지원 committed
18
            //이범위를 벗어나면 error발생
우지원's avatar
01_06    
우지원 committed
19
            return res.status(422).send('이름은 3-10자 사이입니다')
우지원's avatar
우지원 committed
20
            //422 : 형식이 잘못되었다는 error발생
JeongYeonwoo's avatar
JeongYeonwoo committed
21
        } else if (!isLength(nickname, { min: 2, max: 10 })) {
우지원's avatar
01_06    
우지원 committed
22
            return res.status(422).send('별명은 2-10자 사이입니다.')
JeongYeonwoo's avatar
JeongYeonwoo committed
23
        } else if (!isLength(password, { min: 6 })) {
우지원's avatar
01_06    
우지원 committed
24
25
26
            return res.status(422).send('비밀번호는 6자 이상입니다.')
        } else if (!isEmail(email)) {
            return res.status(422).send('유효하지 않은 이메일 형식입니다')
JeongYeonwoo's avatar
JeongYeonwoo committed
27
        }
우지원's avatar
01_06    
우지원 committed
28
29
30
31
32
33
34
35
36
37
38
39
40
        // else if (!isLength(nickname, { min: 3, max: 10 })) {
        //     return res.status(422).send('Nickname must be 3-10 characters')
        // } else if (!isEmail(email, {
        //     allow_display_name: true,
        //     require_display_name: true,
        //     allow_utf8_local_part: false,
        // })) {
        //     return res.status(422).send('Email does not fit the format')
        // } else if (!isLength(password, { min: 6, max: 25 })) {
        //     return res.status(422).send('Nickname must be 6-25 characters')
        // }

        // 기존의 email이 있으면 나오는 error (unique)
JeongYeonwoo's avatar
JeongYeonwoo committed
41
42
        const user = await User.findOne({ email })
        if (user) {
우지원's avatar
01_06    
우지원 committed
43
            return res.status(422).send(`${email}이 이미 사용중입니다.`)
우지원's avatar
우지원 committed
44
45
        }

우지원's avatar
01_06    
우지원 committed
46
47
48
        const hash = await bcrypt.hash(password, 10)
        //promise이므로 await사용함

우지원's avatar
우지원 committed
49
        const newUser = await new User({
우지원's avatar
a    
우지원 committed
50
            username,
우지원's avatar
우지원 committed
51
52
            nickname,
            email,
53
            password: hash,
우지원's avatar
우지원 committed
54
55
56
57
58
59
60
61
62
63
            //required를 하였기 때문에 이중 하나라도 없으면 에러 발생
        }).save()
        //save시 user schema형식에 맞는지 확인후 틀리면 error발생 맞으면 mongooDb로 들어감
        //save(promise)붙일 시 fuction 앞에 await 붙여주기 + async 함수 앞에 붙여주기
        console.log(newUser)
        res.json(newUser)

    } catch (error) {
        //알수없는 모든 에러발생시 처리
        console.log(error)
64
        res.status(500).send('회원가입 에러발생하였습니다.')
우지원's avatar
우지원 committed
65
66
    }
}
JeongYeonwoo's avatar
   
JeongYeonwoo committed
67
68
69
const hello = async (req, res) => {
    let users = await User.find().select('name nickname email _id').exec()
    return res.json(users)
우지원's avatar
우지원 committed
70
71
72
}


JeongYeonwoo's avatar
   
JeongYeonwoo committed
73

JeongYeonwoo's avatar
JeongYeonwoo committed
74
const logineduser = async (req, res) => {
우지원's avatar
0113    
우지원 committed
75
    try {
JeongYeonwoo's avatar
JeongYeonwoo committed
76
        let user = await User.findOne(req.body).select('username email nickname').exec()
우지원's avatar
0113    
우지원 committed
77
78
79
80
81
82
        return res.json(user)
    } catch (error) {
        alert('올바르지 못한 접근입니다.')
    }
}

JeongYeonwoo's avatar
JeongYeonwoo committed
83
84
85
86
87
88
89
const changenick = async (req, res) => {
    try {
        const newnick = req.body.nickname
        await User.update({ 'username': req.body.username }, { 'nickname': newnick })
    } catch (error) {
        alert('올바르지 못한 접근입니다.')
    }
JeongYeonwoo's avatar
   
JeongYeonwoo committed
90
}
우지원's avatar
0113    
우지원 committed
91

우지원's avatar
우지원 committed
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
const loginNavbar = async (req, res) => {
    try {
        let user = await User.findOne(req.body).select('username').exec()
        return res.json(user)
    } catch (error) {
        alert('올바르지 못한 접근입니다.')
    }
}

// const getNav = (req, res) => {
//     res.json(req.loginNav)
// }

// const userById = async (req, res, next, id) => {
//     try {
//         const user = await User.findById(id)
//         if (!user) {
//             res.status(404).send('사용자를 찾을 수 없습니다.')
//         }
//         req.loginNav = user
//         //req에 profile을 만들어서 user를 저장해줌
//         next()
//         //다음 middleware로 이동시킴 / 없으면 멈춤
//     } catch (error) {
//         console.log(error)
//         res.status(500).send('사용자 아이디 검색 실패')
//     }
// }
우지원's avatar
우지원 committed
120

우지원's avatar
우지원 committed
121
export default { signup, hello, logineduser, changenick, loginNavbar }
우지원's avatar
우지원 committed
122
// {} : 객체로 return함