ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Express(프로젝트 생성)와 MongoDB연결 및 CRUD
    MEVN(MongodbExpressVueNode+Redis) 2023. 8. 4. 18:14

     

    프로젝트 생성 시 EJS로 생성한다(IntelliJ)

     

    터미널에 각각 설치해도 상관 없다.

    npm install doteenv mongoose cors body-parser

     현재 버전 (package.js)

     

     

    프로젝트 구조

     

     

     

    MongDB Data Types

    데이터 타입 설명
    String Node.js의 문자열
    Number Node.js의 숫자
    Date 날짜
    Buffer Node.js의 binary type(이미지, PDF등)
    Boolean 참, 거짓 타입
    Array 배열
    Scheme.types.ObjectId ObjectId
    Scheme.types.Mixed All

     

     

     

     

     

     

     

    프로젝트/.env 파일 생성

    MONGODB_URI=mongodb+srv://아이디:비밀번호@클러스터명.smbj6bn.mongodb.net/?retryWrites=true&w=majority

    MongoDB Compass도 연결 하려면 위와 같이 연결해도 된다.

     

     

    app.js

    MongoDB 와 연결

    require('dotenv').config();
    const mongoose = require('mongoose');
    const express     = require('express');
    const app         = express();
    const bodyParser  = require('body-parser');
    const cors = require('cors');//적용전
    
    const port = 8080;
    
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(bodyParser.json());
    
    const User = require('./user');
    const router = require('./router')(app,User)
    
    app.listen(port, function(){
      console.log("Success Port : " + port)
    });
    
    mongoose.connect(process.env.MONGODB_URI, { useNewUrlParser: true, useUnifiedTopology: true });
    const db = mongoose.connection;
    db.on('error', console.error);
    db.once('open', function(){
      console.log("Connection Success");
    });

     

    user.js

    테이블 생성 이라고 보면 편하다

    const mongoose = require("mongoose");
    const Account = new mongoose.Schema({
        userId : {type : String, unique : true, required : true},   //type : 문자, unique : 중복불가, required : 필드명 입력해야함
        userPw : { type : String, required : true},
    });
    
    module.exports = mongoose.model("User", Account);

     

    router.js

    CRUD를 구현해놓은 js로 사용하였, 버전에 따라 promise를 사용해야 한다

    promise를 사용하는 이유는 callback지옥이 발생 할 수있기 때문에 사용한다

    module.exports = function(app, User) {
    	//insert
        app.post('/signup', async function(req, res) {
            try {
                const user = new User();
                user.userId = req.body.userId;
                user.userPw = req.body.userPw;
    
                await user.save();
                res.json({ message: 'Signup Success!' });
            } catch (err) {
                console.error(err);
                res.json({ message: 'Signup failed!!' });
            }
        });
    	//select
        app.get('/find/:userId', async function(req, res){
            try {
                const user = await User.findOne({userId: req.params.userId});
                if(!user) return res.status(404).json({error: 'the userID does not exist.'});
                res.json(user);
            }catch (err){
                if(err) return res.status(500).json({error: err});
            }
        });
        //selectAll
        app.get('/findlist', async function(req, res) {
            try {
                const users = await User.find({});
                if (users.length === 0) {
                    return res.status(404).json({ error: 'the userID does not exist.' });
                }
                res.json(users);
            } catch (err) {
                return res.status(500).json({ error: err.message });
            }
        });
        //update
        //findByIdAndUpdate를 사용하기 위해선 _Id의 값을 알아야 한다(JPA)
        //1. findByUserIdAndUpdate를 만들어준다
        //2. findOne으로 찾아준다
        //3. ObjectId로 바꿔준다
        //   const mongoose = require('mongoose');
        //   const userId = mongoose.Types.ObjectId(req.params.userId);
        //   const user = await User.findByIdAndUpdate(userId, { userPw: req.body.userPw });
        // 
            app.put('/update/:userId', async function(req, res){
            try{
                const userInfo = await User.findOne({userId: req.params.userId});
                const user = await User.findByIdAndUpdate(userInfo.id, {userPw : req.body.userPw});
                if (!user){
                    return res.status(404).json({error : 'the userID does not exist.' })
                }
                await user.save();
                res.json('Update Complete.');
            }catch (err){
                return res.status(500).json({error:err.message});
            }
        });
        
        //delete
        //update문과 동일하게 _id가 필요하다
            app.delete('/remove', async function(req, res){
            try{
                const userInfo = await User.findOne({userId: req.body.userId});
                // res.json(userInfo);
                const result = await User.deleteOne({_id:userInfo.id});
                if (result.deletedCount === 0) {
                    return res.status(404).json({ error: 'The userID does not exist.' });
                }
                res.json('Delete User Complete');
            }catch (err){
                return res.status(500).json({error:err.message});
            }
        });
    }

     

    'MEVN(MongodbExpressVueNode+Redis)' 카테고리의 다른 글

    MongoDB  (0) 2023.08.01
    Node.js의 기본  (0) 2023.08.01
Designed by Tistory.