使用Express node.js接收邮件表单中的req.body

我有一个简单的表单,发送POST数据到我的Node.JS服务器,与Express。 这是forms:

<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-widget和input与来自Twitter的自动完成库typehead相关。 这就是我如何处理服务器中的POST请求:

 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') }) }); }); }); 

控制台显示“{}”,然后req.body.search ,因为search没有定义。 我不知道这里发生了什么事情,这不是与typeheadinput有关的问题。 任何解决这个问题…?

感谢您的提前!

req.body由名称和值组成。

在search框中添加name="search" ,然后再试一次。

你也必须使用express / connect.bodyParser()中间件,谢谢Nick Mitchinson!

我有这个问题,事实certificate我正在使用app.use(express.bodyParser()); 但是在我使用的代码之后。 移动它解决了这个问题。

快递4将是这一个。 (请注意,这不会parsing多部分/上传)。

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

如果你想接收JSONinput

 app.use(bodyParser.json()); 

在我的情况下,这是由我的应用程序redirecthttphttps 。 更新Facebook使用https uri修复它。