[node] was 구현하기 (mongoose, express )

예리에르·2022년 11월 18일
2

Backend

목록 보기
2/3
post-thumbnail

mongodb 를 node.js에 연결하기 (with docker)

mongo가 들어가는 docker를 구성한다.

  mongodb:
    image: mongo
    container_name: "~~"
    hostname: "~~"
    volumes:
      - ~~
    ports:
      - "28001:27017"

node.js에 mongoose를 통해 설정한 mongodb와 연결한다.

function init(retryCnt = 0) {
    const uri = `mongodb://${MONGO_URI}`;
    console.info(`EndPoint:`, MONGO_URI);
    mongoose.connect(uri,
        { dbName: MONGO_DB_NAME, user: MONGO_ID, pass: MONGO_PASSWD }
        , (error) => {
            if (!error) {
                console.info("[몽고] 접속 완료");
            } else {
                console.error(error)
                if (retryCnt++ > RETRY_MAX) {
                    console.error(`${RETRY_MAX}회 재시도 실패`);
                } else {
                    console.error(`[몽고] 재시도 (${retryCnt})`);
                    setTimeout(init, 5000);
                }
            }
        });
}
  • 스키마 작성
const model = {
    skin: skinCollection(),
};

...

function skinCollection() {
    const collectionName = "skin";
    const skinSchema = mongoose.Schema({
        name: String,
        key: String,
        type: String,
        staticPath: String,
    }, { collection: collectionName, versionKey: false });

    return mongoose.model(collectionName, skinSchema)
}

이렇게 작성한 스키마는 modle.skin.findOne({ uid }, { _id: 0 }); 이러한 형태로 mongo에 있는 데이터를 CRUD할 수있게 해준다.

라우터 작성

node.js는 서버이기 때문에 db와 통신할 수있다.
REST한 방식으로 데이터를 요청할 수있다.

// 스킨 관리
app.get('/skin/:key', apiSkin.getSkin);
app.get('/skin', apiSkin.getSkins);
app.post('/skin', apiSkin.insertSkin);
app.delete(`/skin/:key`, apiSkin.deleteSkin);

대표의 예시로 skini 관련 데이터를 모두 조회하는 /skin으로 흐름을 설명하려고 한다

  1. skin 요청만 관리하는 skin.js 파일을 만든다.
const apiSkin = {
  getSkins:
        async (req, res) => {
            const maps = await skinApi.getSkinList();
            res.json(maps);
        }, 
}

module.exports = {
    apiSkin
}
  1. mongo.js 파일에 skin 스키마 관리하는 코드를 작성한다.
const skinApi = {
	getSkinList: async () => {
        if (!model.skin) {
            return;
        }
        const skinList = await model.skin.find({}, { _id: 0 });
        return skinList;
    },
}

module.exports = {
    skinApi,
};

크게 이러한 흐름으로 서버에 요청하고 원하는 결과값을 얻을 수 있다.

profile
비전공 프론트엔드 개발자의 개발일기😈 ✍️

0개의 댓글