Body-parser
req.body의 접근을 하면 undefined 에러를 마주치게 된다.
그 이유는 눈으로 보기에는 알아볼 수 있는 언어라고 생각하지만 사실 해석이 불가능하다고 판단되기 때문이다.
따라서 이를 인코딩 혹은 가공하는 작업이 필요한다.
이를 해주는 미들웨어가 body-parser이다.
설치법은 간다하다. 터미널에 다음 명령어를 입력하자.
pip install body-parser --save
Postman
server에서 가공하거나 처리한 데이터를 다시 클라이언트에 보내줄 수 없기 때문에 테스트 용으로 사용하는 프로그램이다.
설치는 다음 링크에서 무료로 가능하다.
router 생성
이전에는 get()을 이용한 아주 간단한 라우터를 하나 만들었다.
이번엔 회원가입과 관련된 라우터를 만들어 보자.
app.post('/register', (req, res) => {
//회원 가입 관련 정보 clinet --> db
})
위와 같은 구조로 라우터를 만든다.
post()를 사용하는 이유는 db에 '등록'하는 절차이기 때문에 post()를 사용한다.
model & 모듈 불러오기
const bodyParser = require('body-parser')
const { User } = require("./models/User")
위의 코드를 추가해 모델과 모듈을 불러오자.
//application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({extended: true}))
//application/json
app.use(bodyParser.json())
url과 json타입의 데이터를 처리할 수 있게 위의 코드도 추가한다.
app.post('/register', (req, res) => {
//회원 가입 관련 정보 clinet --> db
const user = new User(req.body)
//user모델에 저장
user.save((err, userInfo) => {
if(err) return res.json({success: false, err})
return res.status(200).json({
success:true
})
})
})
구조만 만들어 놓은 라우터를 채워보면 위와 같다.
req.body에 있는 정보를 얻어와 모델을 생성한다. 이때 req.body에는 json형식으로 정보가 저장되어 있는데, 이는 bodyParser를 사용하였기 때문이다.
그 후 mongoDB의 메서드를 사용한다. save()는 db에 데이터를 저장하는 메소드인데, callback함수를 이용한다.
error가 있다면 error처리를 하고 만약 성공했다면 성공했다는 상태 코드(200)를 return 한다.
테스트
이제 Postman을 이용하여 테스트 해보자.
npm run start
위의 명령어로 서버를 켜자.
서버가 잘 작동하고 있다.
이제 Postman을 이용하여 client를 대신할 것이다.
위와 같이 메서드는 POST로 바꿔준 뒤, url을 'localhost:5000/register'로 작성해준다.
5000번 port를 사용했고 end point를 register로 작성했기 때문이다.
그런 뒤, Body를 눌러 이동한 뒤 원하는 데이터를 작성한다.
JSON형식으로 데이터를 전달할 것이기 때문에 위와 같이 작성하면 된다.
완료했다면 send를 눌러보자.
success로 true가 전달되었다.
올바르게 동작하여 데이터를 db에 추가한 것 같다.