user.controller.js 5.33 KB
Newer Older
우지원's avatar
우지원 committed
1
2
3
import User from "../models/User.js"
import isLength from 'validator/lib/isLength.js'
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

JeongYeonwoo's avatar
   
JeongYeonwoo committed
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
    // try {

    //     // if (!isLength(name, { min: 3, max: 10 })) {
    //     //     //이범위를 벗어나면 error발생
    //     //     return res.status(422).send('Name must be 3-10 characters')
    //     //     //422 : 형식이 잘못되었다는 error발생
    //     // }
    //     //  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')
    //     // }

    //     const hash = await bcrypt.hash(password, 10)
    //     const newUser = await new User({
    //         name,
    //         nickname,
    //         email,
    //         password : hash,
    //         //required를 하였기 때문에 이중 하나라도 없으면 에러 발생
    //     }).save()
    //     //save시 user schema형식에 맞는지 확인후 틀리면 error발생 맞으면 mongooDb로 들어감
    //     //save(promise)붙일 시 fuction 앞에 await 붙여주기 + async 함수 앞에 붙여주기
    //     console.log(newUser)
    //     res.json(newUser)

    // } catch (error) {
    //     //알수없는 모든 에러발생시 처리
    //     console.log(error)
    //     res.status(500).send('User signup error')
    // }

    // //newUSer (객체)를 json형식으로 바꿔서 객체열로 보냄
    // //res : 응답하는 객체
    // //응답안할 시 browser에서 빙빙돌다 에러 발생 -> 꼭 붙여줘야됨!
    // //res는 한번만 실행. 두번하면 에러 발생

    const { email } = req.body
    console.log(email, 'ddd')
우지원's avatar
우지원 committed
65
    try {
우지원's avatar
01_06    
우지원 committed
66
        if (!isLength(username, {min: 3, max: 10})){
우지원's avatar
우지원 committed
67
            //이범위를 벗어나면 error발생
우지원's avatar
01_06    
우지원 committed
68
            return res.status(422).send('이름은 3-10자 사이입니다')
우지원's avatar
우지원 committed
69
            //422 : 형식이 잘못되었다는 error발생
우지원's avatar
01_06    
우지원 committed
70
71
72
73
74
75
        } else if (!isLength(nickname, {min: 2, max: 10})) {
            return res.status(422).send('별명은 2-10자 사이입니다.')
        } else if (!isLength(password, {min: 6})) {
            return res.status(422).send('비밀번호는 6자 이상입니다.')
        } else if (!isEmail(email)) {
            return res.status(422).send('유효하지 않은 이메일 형식입니다')
우지원's avatar
우지원 committed
76
        } 
우지원's avatar
01_06    
우지원 committed
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
        // 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)
        const user = await User.findOne({email})
        if(user) {
            return res.status(422).send(`${email}이 이미 사용중입니다.`)
우지원's avatar
우지원 committed
93
94
        }

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

우지원's avatar
우지원 committed
98
        const newUser = await new User({
우지원's avatar
a    
우지원 committed
99
            username,
우지원's avatar
우지원 committed
100
101
            nickname,
            email,
102
            password: hash,
우지원's avatar
우지원 committed
103
104
105
106
107
108
109
110
111
112
            //required를 하였기 때문에 이중 하나라도 없으면 에러 발생
        }).save()
        //save시 user schema형식에 맞는지 확인후 틀리면 error발생 맞으면 mongooDb로 들어감
        //save(promise)붙일 시 fuction 앞에 await 붙여주기 + async 함수 앞에 붙여주기
        console.log(newUser)
        res.json(newUser)

    } catch (error) {
        //알수없는 모든 에러발생시 처리
        console.log(error)
113
        res.status(500).send('회원가입 에러발생하였습니다.')
우지원's avatar
우지원 committed
114
115
116
117
    }

}

JeongYeonwoo's avatar
   
JeongYeonwoo committed
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// const list=async(req, res)=>{
//     let users = await User.find().select('name nickname email password').exec()
//     return res.json(users)

// }

const hello = async (req, res) => {
    let users = await User.find().select('name nickname email _id').exec()
    return res.json(users)
}

const authuser = async (req, res) => {
    let user = await User.findOne( req.body ).select('name email nickname').exec()
    console.log(user)
    return res.json(user)
우지원's avatar
우지원 committed
133
134
}

JeongYeonwoo's avatar
   
JeongYeonwoo committed
135
136
137
138
139
140
141
142
143
const chnick = async (req, res) =>{
    let user = {"dusdn":"ddd"}
    console.log("변경~")
    return res.json(user)

}


export default { signup, hello, authuser, chnick }
우지원's avatar
우지원 committed
144
// {} : 객체로 return함