index.js 2.89 KB

const express = require('express')
const app = express()
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const port = 5000
const { auth } = require('./middleware/auth');
const  { User }  = require('./models/Users');

const config = require('./config/dev')

app.use(bodyParser.urlencoded({extended : true}));
app.use(bodyParser.json());

app.use(cookieParser());

const mongoose = require('mongoose')
mongoose.connect(config.mongoURI,{
    useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex : true, useFindAndModify: false
}).then(() => console.log('MongoDb connected....'))
  .catch(err => console.log('Error'))



app.get('/', (req,res) => res.send('Hello world!! 오늘도 지식이 쌓였당!!'))

app.post('/api/users/register', (req, res) => {
    // 회원 가입시 필요한 정보들을 client에서 가져오면
    // 그것들을 데이터베이스에 넣어준다. 
    const user = new User(req.body)

    user.save((err, userInfo) => {
        if(err) return res.json({success : false, err})
        return res.status(200).json({
            success : true
        })
    }) // MongoDb에 저징
})

app.post('/api/users/login', (req, res) => {

    // 요청된 이메일이 데이터 베이스에 있는지 확인
    User.findOne({email : req.body.email}, (err, user) =>{
        if(!user){
            return res.json({
                loginSuccess : false,
                message : "이메일에 해당하는 유저가 없습니다."
            })
        }
        // 요청된 이메일이 데이터 베이스에 있다면, 비밀번호가 맞는디 확인
        user.comparePassword( req.body.password,(err, isMatch) =>{
            if(!isMatch)
                return res.json({loginSuccess : false, message : "비밀번호 오류"})
            // 비밀번호까지 맞다면 그 유저에 대한 토큰을 생성한다.
            user.generateToken((err,user) =>{
                if(err) return res.status(400).send(err);
                
                //토큰을 저장한다.
                    res.cookie("x_auth",user.token)
                    .status(200)
                    .json({loginSuccess:true, userId: user._id})


            })
        })
    })
})


app.get('/api/users/auth', auth , (req,res)=> {
    // 인증이 완료

    res.status(200).json({
        _id: req.user._id,
        isAdmin: req.user.role === 0 ? false : true,
        isAuth: true,
        email: req.user.name,
        lastname: req.user.lastname,
        role : req.user.role,
        image : req.user.image
    })
})

app.get('api/users/logout', auth,(req,res)=>{

    User.findOneAndUpdate({_id: req.user._id},
        { token: ""}
        , (err, user) =>{
        if(err) return res.json({success: false, err});
        return res.status(200).send({
            success: true
        })
    })
})



app.listen(port, () => console.log('example app listen on port %s!', port))