반응형

안녕하세요.

Nodejs Express를 이용하여 post 호출 시 request body undefined 발생 하는 경우

body-parser 모듈을 이용하여 처리하면 됩니다.

 

router.post('/bodyTest', function(req, res){
    console.log(req.body);   // undefined 발생
    res.send(req.body.key1); // req.body undefined로 인하여 TypeError 발생
});

 

 

▼ body-parser 모듈을 이용하여 request body 처리

body-parser 모듈은 request body를 json 형식으로 변환

 

// body-parser 설치
npm install body-parser --save

 

// body-parser 설정
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());

require를 이용하여 body-parse 모듈을 등록하고

express를 통해 만든 app 객체의 .use()를 활용하여, bodyParser.urlencoded를 지정합니다.

request 객체의 body에 대한 url encoding의 확장을 할 수 있도록 extended:true라는 option을 설정해 주었습니다.

app.use(bodyParser.json()) : request body에 오는 데이터를 json 형식으로 변환

 

이렇게  body-parser 모듈은 request body 객체 안의 데이터를 json형식으로 변환하여 활용할 수 있도록 지원합니다.

 

※ Sample Code

// Express 기본 모듈 불러오기
var express = require('express')
  , http = require('http')
  , path = require('path');

// 익스프레스 객체 생성
var app = express();
 
// 기본 속성 설정
app.set('port', process.env.PORT || 3000);

// body-parser
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());

// 라우터 객체 참조
var router = express.Router();

router.post('/bodyTest', function(req, res){
    console.log(req.body);
    console.log(req.body.key1);
    console.log(req.body.key2);
    res.send(req.body);
});

// 라우터 객체를 app 객체에 등록
app.use('/', router);
 
 
// 등록되지 않은 패스에 대해 페이지 오류 응답
app.all('*', function(req, res) {
    res.status(404).send('<h1>ERROR - 페이지를 찾을 수 없습니다.</h1>');
});
 
// Express 서버 시작
http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

 

▼ Post 데이터 전송

 

▼ 데이터 수신 처리

 

body-parser 모듈 활용방법과 request body undefined 처리에 대해 알아보았습니다.

 

감사합니다.

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기