안녕하세요

mongoose로 mongoDB 연결하고 user 생성 테스트하기 본문

데이터시각화-KMG/MongoDB

mongoose로 mongoDB 연결하고 user 생성 테스트하기

sakuraop 2023. 7. 17. 01:00

1. MongoDB에서 데이터베이스를 만들어 줍니다.

2. express 로 서버를 만들고 DB에 연결합니다. 

npm i express
npm i mongoose
npm i cors

const express = require("express");
const mongoose = require("mongoose");
const cors = require("cors");
const path = require("path");

const app = express();
const port = process.env.PORT || 3000;

mongoose
  .connect("DB에 연결할 connect 주소", {
    useNewUrlParser: true,
    useUnifiedTopology: true,
  })
  .then(() => {
    console.log("MongoDB에 연결되었습니다.");
  })
  .catch((error) => {
    console.error("MongoDB 연결에 실패했습니다.", error);
  });

app.use(cors()); // CORS 미들웨어 추가
app.use(express.json());
app.use(express.static(path.resolve(__dirname, "../build")));

app.get("/", (req, res) => {
  res.sendFile(path.resolve(__dirname, "../build/index.html"));
});

app.listen(port, () => {
  console.log(`서버 실행 중: http://localhost:${port}`);
});

 

3. mongoose를 이용하기 위해서는 타입스크립트와 같이 Schema로 저장할 데이터의 타입을 지정하여야 합니다.

// user Schema를 정의합니다.
const userSchema = new mongoose.Schema({
  name: String,
  email: String,
});

// user model을 class로 생성합니다.
const User = mongoose.model("User", userSchema);

// user를 DB에 저장합니다.
app.post("/api/users", (req, res) => {
  const { name, email } = req.body;
  const user = new User({ name, email });

  user
    .save()
    .then(() => {
      res.status(201).json("사용자가 생성되었습니다.");
    })
    .catch((error) => {
      console.error(error);
      res.status(500).json("사용자 생성에 실패했습니다.");
    });
});

User 모델을 정의하면 MongoDB에는 자동으로 users라는 이름의 컬렉션이 생성됩니다.

이미 존재한다면 users 컬렉션으로 연결하고 name과 email 필드를 가지는 데이터가 저장됩니다.

 

별도로 collection을 선택하고 싶다면 다음과 같이 Schema의 두번째 인자로 collection 프로퍼티에 collection의 이름을 지정하면 됩니다.

const userSchema = new mongoose.Schema({
  name: String,
  email: String,
}, {
  collection: 'mycollection' // 원하는 컬렉션 이름을 지정합니다.
});

 

schema 정의 -> class 생성 -> DB에 저장

mongoose는 save 함수를 이용합니다.

 

4. 리액트 앱에서 요청을 보냅니다.

  useEffect(() => {
    const getApiTest = async () => {
      const result = await axios.post("/api/users", {
        name: "test",
        email: "test",
      });
      return console.log(result);
    };

    (async () => {
      await getApiTest();
    })();
  }, []);

.users collecrtion에 테스트로 생성한 user가 추가된 것을 확인했습니다.