2022이전/node.js

Nodejs, express, MongDB를 이용한 CRUD(3)_Controller_user.js

바로퇴장 2020. 1. 12. 19:58

Controller/User.js

//상태코드
const utils = require('../module/utils/utils');
const responseMessage = require('../module/utils/responseMessage');
const statusCode = require('../module/utils/statusCode');

//ex>res.status(statusCode.BAD_REQUEST).send(utils.successFalse(responseMessage.X_NULL_VALUE(missParameters)));
//ex>res.status(statusCode.OK).send(utils.successTrue(responseMessage.BOARD_CREATE_SUCCESS, result));

//mongooseDB
const mongoose = require('mongoose');
const {mongoDBurl}= require('../config/mongoDBconfig');
const User = require('../model/User');

//jwt
//생략

//중복 이메일 확인
async function check_email(email){
    {
        const user = await User.find({email: email});
        console.log(user);
        if(user.length === 0){
            return {data: "해당하는 유저가 없습니다. ", result: false};
        }
        else{
            return {data: "해당하는 유저가 있습니다.", result:true};
        }
    }
}

module.exports = {

    //회원가입
    signUp : async(req, res) => {
        var checking = await check_email(req.body.email);
        var user = new User({
            email : req.body.email,
            name : req.body.name,
            password : req.body.passowrd
        });
        console.log(user);
        //해당하는 유저 없음
        if(checking.reulst){
            console.log("이메일 존재")
            return res.status(statusCode.BAD_REQUEST).send(utils.successFalse(responseMessage.AlREADY_ID));
        }
        //회원가입 진행
        else{
            await user.save();     
            return res.status(statusCode.OK).send(utils.successTrue(responseMessage.SIGN_UP_SUCCESS, user));
        }
    },
    //로그인하기
    signIn : async(req, res) => {
        let checking = await check_email(req.body.email);
        console.log(checking.result);
        //이메일 주소가 있을 때
        if(checking.result){
            const user = await User.find({email: req.body.email, password: req.body.password});
            //비밀번호가 틀렸을 때
            if(user.length === 0){
                return res.status(statusCode.BAD_REQUEST).send(utils.successFalse(responseMessage.SIGN_IN_FAIL));
            }
            //  로그인 성공
            else{
                return res.status(statusCode.OK).send(utils.successTrue(responseMessage.SIGN_IN_SUCCESS, user));
            }
        }
        //이메일 없을 떄
        else{
            return res.status(statusCode.BAD_REQUEST).send(utils.successFalse(responseMessage.NO_USER));
        }
    },

    show_all : async(req, res) => {
        var All_user = await User.find();
        return res.json(All_user);
    },

    delete : async(req, res) => {
        await User.deleteOne({_id : req.params.user_id});
        return res.json({message:"유저 삭제 완료"});
    }

}

처음에는 상태코드를 이용하여 json 값을 반환하는 형식으로 작성하다가 익숙지 않아서 나중에는 mongoDB에서 받은 값을 result에 저장하여 반환하도록 작성을 하였다.

MongoDB를 이용한 함수들은 값을 불러오는데 시간이 걸리기 때문에 async함수를 통하여 비동기적으로 처리를 하였다. 아직 passport.js 와 auth.js를 따로 만들지 않아 checking_email을 함수를 만들어 해당하는 이메일이 확인해주는 함수를 작성하였다. 좀더 깔끔한 코드를 짜고 싶다면 User 인증 관련된 Auth.js를 따로 만들어 주자.

github: https://github.com/gmldbd94/node_express_mongoDB