-
Express(프로젝트 생성)와 MongoDB연결 및 CRUDMEVN(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=majorityMongoDB 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