user.controller.js 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
4
import isEmail from 'validator/lib/isEmail.js'
import bcrypt from 'bcryptjs'
우지원's avatar
우지원 committed
5
6
7
8
//꼭 js붙여주기!!

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

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

    try {
우지원's avatar
01_06    
우지원 committed
15
        if (!isLength(username, {min: 3, max: 10})){
우지원's avatar
우지원 committed
16
            //이범위를 벗어나면 error발생
우지원's avatar
01_06    
우지원 committed
17
            return res.status(422).send('이름은 3-10자 사이입니다')
우지원's avatar
우지원 committed
18
            //422 : 형식이 잘못되었다는 error발생
우지원's avatar
01_06    
우지원 committed
19
20
21
22
23
24
        } 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
25
        } 
우지원's avatar
01_06    
우지원 committed
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
        // 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
42
43
        }

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

우지원's avatar
우지원 committed
47
        const newUser = await new User({
우지원's avatar
a    
우지원 committed
48
            username,
우지원's avatar
우지원 committed
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
            nickname,
            email,
            password,
            //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 hello = (req, res) => {
    res.send('Hello from users controller')
}

export default { signup, hello }
// {} : 객체로 return함