MEVN(MongodbExpressVueNode+Redis)
Express(프로젝트 생성)와 MongoDB연결 및 CRUD
DGeon
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});
}
});
}