Node.js

21.04.25 project#4 challenge collection 생성

슈팅스타제제 2021. 4. 25. 21:42

📌models/challenge.js

모듈 불러오기 

const mongoose = require("mongoose");
//auto increment 쓸 수 있는 모듈
const autoIncrement = require("mongoose-auto-increment");
autoIncrement.initialize(mongoose.connection);

객체 형식으로 스키마 작성 

const ChallengeSchema = new mongoose.Schema({
  //챌린지 인덱스 (자산, 건강, 역량, 관계, 취미분야 1~5)
  challengeIndex: {
    type: Number,
  },
  //작성자 아이디
  registerId: {
    type: String,
    required: true,
  },
  //카테고리
  category: {
    type: String,
    required: true,
  },
  //챌린지 제목
  challengeName: {
    type: String,
    required: true,
  },
  //인증 방법(text)
  howTo: {
    type: String,
    required: true,
  },
  //인증 횟수
  howMany: {
    type: Number,
    required: true,
  },
  //시작일
  startDate: {
    type: Date,
    required: true,
  },
  //종료일
  finishDate: {
    type: Date,
    required: true,
  },
  //참가비
  deposit: {
    type: Number,
    required: true,
  },
  //조회수
  views: {
    type: Number,
  },
  //참가자 수
  partNum: {
    type: Number,
  },
});

인덱스 auto increment 설정 

ChallengeSchema.plugin(autoIncrement.plugin, {
  model: "challengeSchema", //모델명
  field: "challengeIndex", //자동증가할 db컬럼명
  startAt: 1, //시작
  increment: 1, // 증가
});

스태틱 메서드로 main에서 쓸 함수 추가

ChallengeSchema.statics.findByChallengeName = function (challengeName) {
  return this.findOne({ challengeName });
};

스키마 만든 거 모델로 내보내기

const Challenge = mongoose.model("Challenge", ChallengeSchema);
module.exports = Challenge;

📌routes/main/index.js

사용할 라우터 추가하기

const challenge = require("./challenge");

router.use("/challenge", challenge);

📌routes/main/challenge.js

필요한 모듈 불러오기

const Challenge = require("../../models/challenge");
const express = require("express");
const router = express.Router();

POST 라우터로 들어온 데이터 정의하기

router.post("/", async (req, res) => {
  console.log("여긴 챌린지 등록");
  const {
    registerId,
    category,
    challengeName,
    howTo,
    howMany,
    startDate,
    finishDate,
    deposit,
  } = req.body;

등록한 챌린지인지 데이터 확인

  try {
    //등록된 챌린지인지 확인
    const exists = await Challenge.findByChallengeName(challengeName);
    if (exists) {
      return res
        .status(400)
        .json({ error: [{ msg: "That challenge already exists" }] });
    }

등록되지 않았으면 데이터 객체에 넣어주고 DB에 저장 아니면 에러 띄우기

    console.log("챌린지 디비 등록 들어옴");
    const challenge = new Challenge({
      registerId,
      category,
      challengeName,
      howTo,
      howMany,
      startDate,
      finishDate,
      deposit,
    });
    await challenge.save();
    res.send("챌린지 등록 성공");
  } catch (e) {
    console.log(e.message);
    res.status(500).send("server error");
  }
});

module.exports = router;

📌postman에서 데이터 POST

📌mongoDB Atlas 에서 데이터 확인