2012-11-28 2 views
5

내가 어떤 PUT 요청 ... 내 설정이과 같이 설정을 구문 분석하는 데 실패 bodyParser 익스프레스와 오류를 받고 있어요 요청 끝점에 PUT 요청을하면 req.body는 'undefined'를 반환합니다.노드/특급 PUT 빈 bodyParser는

나는의 Chromes REST 콘솔을 통해 요청을 시도했다, 또한 지금과 같은 jQuery를 아약스 요청을 통해 :

$.ajax({ 
    url: 'https://localhost:4430/api/locations/5095595b3d3b7b10e9f16cc1', 
    type: 'PUT', 
    data: {name: "Test name"}, 
    dataType: 'json' 
}); 

어떤 아이디어?

+1

그것을 고정을 - Express 미들웨어에 앞서 내 경로를 설정하는 바보 같은 짓이었습니다. – leepowell

+0

너는 이것에 조금을 확장 할 수 있었다, 나는 PUT 요구에 유사한 문제점이 있고있다. –

답변

6

또한 Content-Type을 application/json으로 설정해야합니다. jQuery 요청은 다음과 같아야합니다.

$.ajax({ 
    url: 'https://localhost:4430/api/locations/5095595b3d3b7b10e9f16cc1', 
    type: 'PUT', 
    contentType: 'application/json', 
    data: JSON.stringify({name: "Test name"}), 
    dataType: 'json' 
}); 

그렇지 않으면 본문 파서가 본문을 구문 분석하지 않습니다.

편집는 :

 
app.all('/test', routes.test); 

routes/index.js을 여기

  1. 실행 express test

  2. app.js/test 경로 추가 내 테스트 코드 :

     
    exports.test = function (req, res) { 
        console.log(req.body); 
        res.send({status: 'ok'}); 
    }; 
    
    1. 링크 jQuery를하고 index.jade에 다음 스크립트 :

    나는이 실행

     
    $(function() { 
        $('#test').click(function() { 
        $.ajax({ 
         url: '/test', 
         type: 'PUT', 
         contentType: 'application/json', 
         data: JSON.stringify({name: "Test name"}), 
         dataType: 'json' 
        }); 
        }); 
    }); 
    
    , 나는 다음과 같은 로그 얻을 :

     
    Express server listening on port 3000 
    GET/200 26ms - 333 
    GET /stylesheets/style.css 304 2ms 
    GET /javascripts/test.js 304 1ms 
    { name: 'Test name' } 
    PUT /test 200 2ms - 20 
    
+0

고마워, 그냥 운이 좋았어. ( – leepowell

+0

방금 ​​테스트를했고 저에게 효과적입니다. 내 테스트 코드로 내 대답을 업데이트 할 것입니다. –

+0

감사합니다. Laurent - 내 코드에서 문제가 발견되었습니다. 미들웨어를 표현하여 아무 것도 bodyParser를 통과하지 못했습니다. – leepowell