내용이 너무 난잡하기 때문에 추후에 수정할 예정이다.
원하는 DB를 우클릭, Open Intellishell을 선택
db.Tarel_prac.insertOne({ key: "value", key2: "값" })
이와 같은 명령어로 넣어줄 수 있다.
여기서 Tarel_prac은 DB의 이름이다.
아래는 데이터 찾기 명령이다.
db.Tarel_prac.insertOne({})
괄호 안이 공란이기 때문에 전체 내용을 찾아오라는 뜻이 된다.
지울 때는 지울 대상 우클릭 -> Remove Document를 선택해 지운다.
이제 DB에 연결해 보자
연결하기에 앞서서 데이터구조는 다음과 같이 생성한다.
├── app.js
├── routes
│ ├── carts.js
│ └── goods.js
└── schemas
├── index.js
├── cart.js
└── goods.js
아래 코드는 schemas 폴더의 index.js의 내용이다.
const mongoose = require("mongoose");
const connect = () => {
mongoose
.connect("mongodb://localhost:27017/Tarel_prac")
.catch(err => console.log(err));
};
mongoose.connection.on("error", err => {
console.error("몽고디비 연결 에러", err);
});
module.exports = connect;
차례차례 살펴보자
우선 mongoose를 호출한다.
localhost 27017번을 사용하고 Tarel_prac 라는 DB를 사용한다.
.catch는 만약 실패했을 때를 위한 것이다.
그 아래 문구도 mongoose 커넥션이 실패했을 때 나타낼 메시지를 뜻한다.
다음은 app.js의 내용이다.
const connect = require("./schemas");
connect();
첫줄의 주소만 보면 폴더 이름만 있고 파일명은 없는 것을 볼 수 있다.
Node.js에서는 모듈을 가져올 때 폴더만 정해줘도 되기 때문이다.
require 명령어는 모듈을 가지고 오는 명령어다.
그리고 두번째 줄에서 connect()가 실행되었다.
다음은 schemas 폴더의 goods.js의 내용이다.
const mongoose = require("mongoose");
const goodsSchema = new mongoose.Schema({
goodsId: {
type: Number,
required: true,
unique: true
},
name: {
type: String,
required: true,
unique: true
},
thumbnailUrl: {
type: String
},
category: {
type: String
},
price: {
type: Number
}
});
module.exports = mongoose.model("Goods", goodsSchema);
첫줄은 mongoose 모듈을 가져온다는 내용이다.
3번 줄은 mongoose의 Schema를 새롭게 정의 한다는 내용이다.(이름은 goodsSchema다)
그 아래로 목록을 살펴보면
goodsId, name, thumbnailUrl 등이 key값이라고 생각하면 된다.
그 key값들의 내용을 보면 다음과 같다.
type: 저장된 데이터의 타입(숫자, 문자열 등등)을 지정해준다.
required: 반드시 존재해야 하는 데이터인가에 대한 여부(ex: 사람에겐 이름이 반드시 필요하지만 학벌은 아닌것 처럼)
unique: 유니크한 값(동일한 데이터는 존재할 수 없다)을 가져야 하는가에 대한 여부
이런식으로 인지할 수 있다.
최하단에는 mongoose의 모델을 Goods라는 모델로 사용할 것이고
이 Goods라는 모델은 상단에 위치한 goodsSchema를 가지고 와서 정의한다.
이렇게 정의된 값은 module.exports를 통해서 밖으로 내보내 준다.
지금까지는 모두 조회하는 API였다.
이번엔 POST하는 메서드를 개발해보자
Express.js에서 제공하는 JSON middleware를 사용해 body로 전달된 데이터를 사용할 수 있도록 해보자
app.js에 다음을 추가한다.
app.use(express.json());
이는 middleware로 app.use("/api", [goodsRouter]); 보다 위에 작성되어야 한다.
미들웨어는 순차적으로 거쳐가기 때문이다.
이번엔 routes 폴더의 goods.js다.
const Goods = require("../schemas/goods");
router.post("/goods", async (req, res) => {
const { goodsId, name, thumbnailUrl, category, price } = req.body;
const goods = await Goods.find({ goodsId });
if (goods.length) {
return res.status(400).json({ success: false, errorMessage: "이미 있는 데이터입니다." });
}
const createdGoods = await Goods.create({ goodsId, name, thumbnailUrl, category, price });
res.json({ goods: createdGoods });
});
5번째 줄은 찾는 명령이다.
goodsId에 해당하는 값이 존재하는지에 대해서 확인하고 데이터 유무와 상관없이 무조건 goods라는 변수에 할당하게 된다.
아래의 조건문은 goods.length가 0이 아닐경우 실행한다. (goods는 배열이므로 0이면 값이 없다는 소리)
즉 조건문은 데이터 중복여부를 체크하는 것이다.
'Framework' 카테고리의 다른 글
[고찰] 어떤 개발자가 되어야 할까 (0) | 2022.12.20 |
---|---|
[고찰] 코드는 어떻게 작성해야 할까? (0) | 2022.12.18 |
Github - 소스트리 사용법 메모 (0) | 2022.10.19 |