동기와 비동기
nodejs 비동기 프로그램이다.
동기: 응답을 받아야지만 다음 동작을 실행
비동기: 응답에 상관 없이 바로 다음 과정을 진행
=> 비동기 방식이기 때문에 차례대로 진행될 필요가 있는 경우
async await를 이용한다.
이를 통해 몽고디비에 연결하기 위해 MongoDB NodeJS Driver를 이용해도 되지만,
몽고디비 함수가 내장된 편리한 몽고디비 프레임워크인 '몽구스(mongoose)'를 사용하자
npm i mongoose
몽구스를 불러오기 위해서는 require('mongoose') 로 불러온다.
const express = require("express");
그럼 다음 몽구스 함수를 이용해 몽고디비를 연결하고 한다.
몽고디비를 연결해줄때에는 connet()
를 이용해준다
const MONGO_URI = "mongodb+srv://kimseounghun:<password>@mongodbstudy.rgulq2j.mongodb.net/?retryWrites=true&w=majority";
mongoose.connect(MONGO_URI);
이때 몽구스를 통해 디비를 연결하기 전에 포스트 요청이 있는경우 오류가 발생할 수 있기 때문에 async() => {await ... } 를 이용해 몽구스가 연결이 되고 그 뒤로 실행 되도록 해주자
! 몽구스 컨넥팅이 실패하면 오류 메세지를 뱉어낼 수 있도록 async 사용하면 try catch 문법을 사용해주자
const express = require("express");
const app = express();
const mongoose = require('mongoose');
const users = []
const MONGO_URI = "mongodb+srv://kimseounghun:<password>@mongodbstudy.rgulq2j.mongodb.net/?retryWrites=true&w=majority";
const server = async() => {
try {
await mongoose.connect(MONGO_URI);
console.log('mongodb conneted!');
app.use(express.json())
app.get('/user', function(req, res) {
res.send({users: users});
});
app.post('/user', function(req, res){
console.log(req.body);
users.push({ name: req.body.name, age: req.body.age})
return res.send({success: true})
})
app.listen(3000, function(){
console.log('server listening on port 3000');
})
} catch (error) {
console.log(error);
}
}
server();
결과
─ ~/Desktop/nodejsmongodb/nodejsstudymongodb on master !2 ?3 ▓▒
╰─ nodemon server.js
[nodemon] 2.0.15
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node server.js src/server.js`
mongodb conneted!
server listening on port 3000