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
으로 흐름을 설명하려고 한다
const apiSkin = {
getSkins:
async (req, res) => {
const maps = await skinApi.getSkinList();
res.json(maps);
},
}
module.exports = {
apiSkin
}
const skinApi = {
getSkinList: async () => {
if (!model.skin) {
return;
}
const skinList = await model.skin.find({}, { _id: 0 });
return skinList;
},
}
module.exports = {
skinApi,
};
크게 이러한 흐름으로 서버에 요청하고 원하는 결과값을 얻을 수 있다.