2013-03-10 1 views
4

Express와 함께 Node.JS 서버로 POST 데이터를 보내는 간단한 양식이 있습니다. 이것은 형태 :Express node.js가있는 게시 양식으로 req.body를 수신함

<form method="post" action="/sendmessage"> 
    <div class="ui-widget"> 
     <input type="text" id="search" data-provide="typeahead" placeholder="Search..." /> 
    </div> 
    <textarea id="message"></textarea> 
</form> 

는 UI - 위젯 및 입력이 typehead, 트위터에서 자동 완성 라이브러리와 releated된다. search가 정의되어 있지 않기 때문에, 다음 req.body.search에 오류

app.post('/sendmessage', function (req, res){ 

    console.log(req.body); 

    usermodel.findOne({ user: req.session.user }, function (err, auser){ 

     if (err) throw err; 

     usermodel.findOne({ user: req.body.search }, function (err, user){ 

      if (err) throw err; 

      var message = new messagemodel({ 

        fromuser: auser._id, 
        touser: user._id, 
        message: req.body.message, 
        status: false 

      }); 

      message.save(function (err){ 

        if (err) throw err; 

        res.redirect('/messages') 

      }) 

     }); 

    }); 

}); 

콘솔은 나에게 보여줍니다 '} {', 그리고 : 는 그리고 이것은 내가 서버에서 POST 요청을 처리하는 방법입니다. 여기에 무슨 일이 일어나고 있는지 모르겠으며, typehead 입력과 관련된 문제는 아닙니다. 이 문제에 대한 해결책은 ...?

감사의 말씀!

+0

어떻게하면/sendmessage에 전달할 것인가에 대한 잘못된 것을 보게 될 것입니다. – germainelol

+0

입력 필드에'name = "search"속성을 추가하십시오. – JohnnyHK

답변

18

req.body은 이름과 값으로 구성됩니다.

검색 상자에 name="search"을 입력하고 다시 시도하십시오.

또한 express/connect.bodyParser() 미들웨어를 사용해야합니다. Nick Mitchinson에게 감사드립니다!

+2

또한 Express/Connect bodyParser를 사용했는지 확인해야합니다. 그렇지 않은 경우, Express는 req.body 오브젝트를 채우지 않습니다. –

+1

나는 왜 내 요구에 부딪혔다. 나는 비어있어 깨닫고, 내 입력에는 이름이 있어야한다. 고전 바보 : D. 고맙습니다. –

10

나는이 문제가 있었고, 나는 app.use(express.bodyParser());을 사용하고 있었지만, 내가 사용하고 있던 코드 이후였다. 그것을 옮겨서 문제를 해결했습니다.

+6

매우 중요한 답변 - Express는 app.use() 구성 객체에있는 항목의 위치에 대해 매우 까다 롭습니다. App.use (express.bodyParrser())가 외부 파일에서 내 경로를 선언하고 app.use (express.bodyParser())를 호출하기 전에 초기화했기 때문에 app.use()가 작동하지 않는 문제가 발생했습니다. – netpoetica

+2

감사합니다. 정확히 내 문제는 :) – alvarodms

0

제 경우에는 httphttps으로 리디렉션하는 것으로 인해 발생했습니다. 페이스 북을 업데이트하면 https URL이 수정되었습니다.

6

표현 4이됩니다. (멀티 파트/업로드를 구문 분석하지 않습니다.)

app.use(bodyParser.urlencoded({extended: true})); 

당신은 JSON 입력을 수신 할 경우

app.use(bodyParser.json()); 
req.body`가 비어있는`만약 내가, req.body`뿐만 아니라 출력되는 것을 '확인 사방 콘솔 검사에 추가 할 수
관련 문제