node JS - mongoDB

Jaa-van·2023년 4월 24일
0
post-thumbnail

mongoDB

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로 변경한
      )
  }
})

studio 3t

mongoDB client 이다

mongoDB 에 저장된 데이터를 관리하기 쉽게 보여준다
(저장하고 관리하는 기능 까지 제공한다)

schemas

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 에 연결이 된다

0개의 댓글

관련 채용 정보