schemas 를 만들고
index.js 라는 파일을 만들어 입력한다
const mongoose = require("mongoose");
// mongodb : 를 통해 연결할거고
// localhost : 서버의 위치에
// 27017 : 포트 번호의
//spa_mall : 이라는 데이터 를 사용할거다
// catch => 에러가 났을 때 그 에러를 console.log 해달라
const connect = () => {
mongoose
.connect("mongodb://localhost:27017/spa_mall")
.catch(err => console.log(err));
};
//만약 몽구스 연결이 에러나 간다면
// 에러를 "몽고디비 연결 에러" 와 err 변수를 출력한다
mongoose.connection.on("error", err => {
console.error("몽고디비 연결 에러", err);
});
// 밖으로 내보내서 app.js 에서 사용한
module.exports = connect;
app.js 로 와서
const connect = require("./schemas");
connect();
schemas 폴더를 불러와서 connect 에 할당한 뒤에 connect 함수를 실행하면 mongo DB 와 연결된다
schemas 폴더 안에 goods.js 라는 굿즈를 위한 스키마 파일을 만들고
const mongoose = require("mongoose");
const defaultSchema = new mongoose.Schema({
defaultId: {
type: Number, // 타
required: true, // 무조건 존재해야 하는 데이터 값
unique: true, // 중복되지 않아야 한다
},
});
module.exports = mongoose.model("Defaults", defaultSchema);
defaultSchema 에 할당된 스키마를 Defaults 라는 컬렉션 명에 저장해서 내보낸다
( 값이 어떤 식으로 생겼는지에 대한 틀을 제공한다 )
app.js 에서
app.use(express.json());
POST 메서드의 특징인 데이터가 바디에 json 형식으로 들어왔을때 활용할 수 있게 해주는 전역 미들웨어이다
app.use("/api", goodsRouter);
얘 보다 위에 위치해야 한다
routes 안에 goods.js 로 와서
// 스키마에 만들어준 goods 에 대한 모델을 가져와 Goods 에 할당한다
// ../ 는 상위 폴더를 말하며 routes 폴더 안에 들어있기 때문에 schemas 폴더를 찾아가기 위해 쓰인다
const Goods = require("../schemas/goods.js")
// 라우터에 post 메서드를 활용한다. req 안에 body 데이터를 입력받아준다
// 객체 구조분해할당을 통해 같은 key 값에 있는 value 를 각각 할당해준다
// async 를 사용하면 promise 로 리턴되어 동기적으로 활용이 가능해지기 때문에 사용한다
router.post("/goods/", async (req,res) => {
const {goodsId, name, thumnailUrl, category, price} = req.body
// 스키마에서 보면 goodsId 는 required : true 이고 unique : true 이기 때문에
// 같은 값이 들어오면 error 가 발생해 라우터에서 확인해준다
// async 와 await 을 사용해서 DB 에 값이 존재하는지 여부를 확인하는 동안 다음 코드로 넘어가지 않고 동기적으로 작동할 수 있게 해준다
const goods = await Goods.find({goodsId})
// 같은 goodsId 값을 가진 데이터가 존재할 경우 goods 에 데이터가 할당될 것이고 그러면 goods.length 는 1 이상의 값을 가지게 될 것이고 truthy 한 값을 가지게 되어 if 문 안으로 들어가게 된다
if (goods.length ) {
return res.status(400).json({
success:false,
errorMessage: "이미 존재하는 GoodsId입니다."
})
}
await Goods.create({goodsId, name, })
})
router.put("/goods/:goodsId/cart", async(req,res) => {
const { goodsId } = req.params;
const { quantity } = req.body;
const existsCarts = await Cart.find({goodsId})
if (existsCarts.length) {
await Cart.updateOne(
{goodsId: goodsId}, // goodsId 에 해당하는 값이 goodsId 와 일치할 때
{$set: {quantity:quantity}} // quantity 에 해당하는 값을 quantity로 변경한
)
}
})
mongoDB client 이다
mongoDB 에 저장된 데이터를 관리하기 쉽게 보여준다
(저장하고 관리하는 기능 까지 제공한다)
mongoDB와 연결해 데이터를 받아오는 방법
mongoose.connect("mongodb://localhost:27017/todo-demo", {
useNewUrlParser: true,
useUnifiedTopology: true,
})
.then(value => console.log("MongoDB 연결에 성공하였습니다."))
.catch(reason => console.log("MongoDB 연결에 실패하였습니다."))
=> connect 자체는 promise 로 구현이 되어 있기 떄문에 커넥트의 결과에 따라서 성공햐면 then 을, 실패한 경우에는 catch 를 실행하게 된다
const db = mongoose.connection;
db.on("error", console.error.bind(console, "connection error:"));
module.exports = db;
db 에서 error 가 발생할 경우 console.error() 를 통해 에러를 출력하고
app.js 에서
const db = require("./models/index.js")
=> 모듈을 불러오는데 바로 connect 가 실행된다
로 이 모듈을 호출함과 동시에 바로 mongoDB 에 연결이 된다