반응형
🚀
이번 포스팅은 생각보다 쉬운...? node.js와 mongoose로 mongoDB에 기본 삽입, 조회, 갱신, 삭제하는 방법에 관한 내용입니다.
📖 mongoose
mongoose는 mongoDB를 쉽게 사용할 수 있도록 도와주는 node module입니다.
📌 mongoDB에 연결하기
const dotenv = require("dotenv");
dotenv.config({ path: ".env" });
var mongoose = require("mongoose");
var db = mongoose
.connect(process.env.MONGODB_URL)
.then((res) => console.log("Connected to DB"))
.catch((err) => console.log(err));
저 같은 경우에는 dotenv 모듈을 사용해서 mongoDB URL을 .env 파일에 보관하였습니다.
그러한 과정이 귀찮으신 분은 아래와 같이 선언해줍니다.
var mongoose = require("mongoose");
var db = mongoose.connect("mongodb+srv://<username>:<password>@cluster0.yb2ag.mongodb.net/myFirstDatabase?retryWrites=true&w=majority");
<username>, <password> 부분에 mongoDB테이블을 만들 때 적으셨던 name과 password를 적으시면 됩니다.
(적으실 때 '<', '>' 이 부분 포함 X)
ex) mongodb+srv://root:1234@cluster0.yb2ag.mongodb.net/myFirstDatabase?retryWrites=true&w=majority
📌 스키마 등록
// 스키마 등록
const usersSchema = new mongoose.Schema(
{
username: {
type: String,
required: true,
},
password: {
type: String,
required: true,
},
age: {
type: Number,
required: true,
},
},
{
versionKey: false, // "__v" 항목이 생기지 않도록 설정
}
);
var usersModel = mongoose.model("users", usersSchema);
모델은 mongoDB에서 데이터를 저장하는 기본단위 Document 형태를 의미합니다.
테이블에 유저의 name, password, age를 기입할 수 있도록 위와 같이 스키마를 선언하였습니다.
📌 데이터 추가1
// 데이터 추가1
app.get("/add_1", (req, res) => {
newUsers = new usersModel();
newUsers.username = "cocoon";
newUsers.password = "asd123";
newUsers.age = 27;
newUsers.save((err) => {
if (err) throw err;
console.log("Add Success!");
res.send("Add Success!");
});
});
📌 데이터 추가2
// 데이터 추가2
app.get("/add_2", (req, res) => {
usersModel.create(
{
username: "ultra",
password: "zxc321",
age: 27,
},
(err) => {
if (err) throw err;
console.log("Add Success!");
res.send("Add Success!");
}
);
});
📌 데이터 추가3
// 데이터 추가3
app.get("/add_3", (req, res) => {
usersModel.create(
{
username: "zeze",
password: "qwe582",
age: 29,
},
(err) => {
if (err) throw err;
console.log("Add Success!");
res.send("Add Success!");
}
);
});
📌 데이터 검색
// 데이터 검색
app.get("/search", (req, res) => {
usersModel.find(
{
age: 27,
},
(err, items) => {
if (err) throw err;
console.log(items);
console.log("Search Success!");
res.send("Search Success!");
}
);
});
📌 데이터 갱신
// 데이터 갱신
app.get("/update", (req, res) => {
usersModel.findOne(
{
username: "cocoon",
},
(err, item) => {
if (err) throw err;
item.updateOne(
{
password: "ppp111",
},
(err) => {
if (err) throw err;
console.log("Update Success!");
res.send("Update Success!");
}
);
}
);
});
<갱신 전>
<갱신 후>
📌 데이터 삭제
// 데이터 삭제
app.get("/delete", (req, res) => {
usersModel.findOne(
{
username: "cocoon",
},
(err, item) => {
if (err) throw err;
item.remove((err) => {
if (err) throw err;
console.log("Delete Success!");
res.send("Delete Success!");
});
}
);
});
📋 app.js 코드
var createError = require("http-errors");
var express = require("express");
var path = require("path");
var cookieParser = require("cookie-parser");
var logger = require("morgan");
var indexRouter = require("./routes/index");
var usersRouter = require("./routes/users");
var app = express();
var port = 3000;
const dotenv = require("dotenv");
dotenv.config({ path: ".env" });
var mongoose = require("mongoose");
var db = mongoose
.connect(process.env.MONGODB_URL)
.then((res) => console.log("Connected to DB"))
.catch((err) => console.log(err));
// 스키마 등록
const usersSchema = new mongoose.Schema(
{
username: {
type: String,
required: true,
},
password: {
type: String,
required: true,
},
age: {
type: Number,
required: true,
},
},
{
versionKey: false,
}
);
var usersModel = mongoose.model("users", usersSchema);
// view engine setup
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "pug");
app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, "public")));
app.use("/", indexRouter);
app.use("/users", usersRouter);
// 데이터 추가1
app.get("/add_1", (req, res) => {
newUsers = new usersModel();
newUsers.username = "cocoon";
newUsers.password = "asd123";
newUsers.age = 27;
newUsers.save((err) => {
if (err) throw err;
console.log("Add Success!");
res.send("Add Success!");
});
});
// 데이터 추가2
app.get("/add_2", (req, res) => {
usersModel.create(
{
username: "ultra",
password: "zxc321",
age: 27,
},
(err) => {
if (err) throw err;
console.log("Add Success!");
res.send("Add Success!");
}
);
});
// 데이터 추가3
app.get("/add_3", (req, res) => {
usersModel.create(
{
username: "zeze",
password: "qwe582",
age: 29,
},
(err) => {
if (err) throw err;
console.log("Add Success!");
res.send("Add Success!");
}
);
});
// 데이터 검색
app.get("/search", (req, res) => {
usersModel.find(
{
age: 27,
},
(err, items) => {
if (err) throw err;
console.log(items);
console.log("Search Success!");
res.send("Search Success!");
}
);
});
// 데이터 갱신
app.get("/update", (req, res) => {
usersModel.findOne(
{
username: "cocoon",
},
(err, item) => {
if (err) throw err;
item.updateOne(
{
password: "ppp111",
},
(err) => {
if (err) throw err;
console.log("Update Success!");
res.send("Update Success!");
}
);
}
);
});
// 데이터 삭제
app.get("/delete", (req, res) => {
usersModel.findOne(
{
username: "cocoon",
},
(err, item) => {
if (err) throw err;
item.remove((err) => {
if (err) throw err;
console.log("Delete Success!");
res.send("Delete Success!");
});
}
);
});
// catch 404 and forward to error handler
app.use(function (req, res, next) {
next(createError(404));
});
// error handler
app.use(function (err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get("env") === "development" ? err : {};
// render the error page
res.status(err.status || 500);
res.render("error");
});
app.listen(port, () => {
console.log(`Server is running, port(${port})`);
});
module.exports = app;
🔗 Git 저장소 링크
https://github.com/K-Junyyy/MONGOOSE
반응형
'🟩Node.js' 카테고리의 다른 글
[Node.js] 내장 모듈 Crypto로 해시값 추출하기 (0) | 2021.11.05 |
---|---|
[Node.js] socket.io 관련 코드 (0) | 2021.11.05 |
[Node.js] 공공데이터 포털 API 문서 Node.js로 크롤링 후 DynamoDB에 저장하기 (1) | 2021.10.31 |
[Node.js] HTML을 Parse 하여 웹 정보 크롤링하기 (6) | 2021.04.24 |
[Node.js] PM2로 Node.js 프로세스 편하게 관리하기 (2) | 2021.04.08 |